Назад
Создание прибыльного бизнеспроекта на базе сайта

SEO + ASP.NET 4.0 + БИЗНЕСМОДЕЛЬ = ПРИБЫЛЬНЫЙ САЙТ

Инструмент быстрого построения прибыльного онлайн бизнеса своими силами без капиталовложений за 4 месяца все подробности на SEO + ASP.NET 4.0.

Подписка на рассылку

МАГИЯ C#!

Создание вебсайта с формой автоматического приема онлайн платежей по WebMoney!
Ваше имя
Ваш e-mail
Уроки по ASP.NET c# ADO.NET
     

18 видеоуроков
более 5 часов
по созданию сайта,
выполняющего
продажи ваших продуктов (физических/электронных) на полном автомате с личным оповещением на e-mail, а также ...
DVD-курс по C#, .NET

3 часть. Введение в ASP.NET. WebServices Профессиональная подготовка разработчика по языку C# на платформе .NET

asp.net webservices dvd c# gridview Гудок курс Более 65 подробных видео уроков по теоретическим основам технологии сайтостроения ASP.NET и процессу создания и использованию вебсервисов.

DVD-курс по C#, .NET

2А часть. XML/TXT в аспекте ADO.NET Профессиональная подготовка разработчика по языку C# на платформе .NET

xml txt dvd c# ADO ADO.NET Гудок курс 70 подробных видео уроков по работе с форматами xml, txt, по работе с файлами и директориями. Разработка высокоорганизованных свойств для значительного сокращения объема исходного кода и облегчения дальнейшей модификации и многое-многое другое...

DVD-курс по C#, .NET

1 часть. Windows Forms Профессиональная подготовка разработчика по языку C# на платформе .NET

Профессиональная подготовка на c# А. Гудок

185 подробнейших уроков (70 часов) лекций в формате видеоуроков по теории языка c# и платформы .NET. Практическое закрепление теоретического материала на примере создания Windows Forms - приложения видеоигры "Tanks"

DVD-курс по C#, .NET

2 часть. ADO.NET/SQL Профессиональная подготовка разработчика по языку C# на платформе .NET

Профессиональная подготовка на c# А. Гудок ADO.NET sql

165 подробных видео уроков по созданию приложений распределенных баз данных на примере разработки проектов с использований технологий ADO.NET (Connected model, Disconnected model, Typed DataSet, ...)


Я записываю курсы!
  Курс валют

НБУ курс евро






Select метод для поиска строк (записей) по связанным таблицам. Или применение функций Parent, Child, GetParentRow, GetParentRows, GetChildeRow, GetChildeRows и внешних связей между таблицами



В прошлой статье мы коснулись темы задание фильтра для получения объекта DataView на основе некоторого DataTable. Продолжая данную тему, в этой статье больше сосредоточимся на создании строки запроса для метода DataTable.Select(). Ведь, выполнять поиск возможно и по самому объекту DataTable, только в этом случае мы получим не конкретно объект DataView, а массив DataRow.

RowFilter DataView DataTable фильтрация сортировка Select выборка

Итак. Имеем представленную выше схему взаимосвязанных таблиц в представлении строго типизированного DataSet.

Информация о книгах содержится в трех связанных таблицах. При чем, конкретно в таблице Books содержится всего единственное личное поле ISBN, а вся остальная информация о книге раcполагается в таблицах Authors (содержит имя автора книги) и Items (содержит название книги, издателя и дату издания).

Клиентский тип, представляющий книгу представлен классом:

class Book
{
	String Name {get; private set;}
	String Publisher {get; private set;}
	DateTime PublishedDate {get; private set;}
	String AuthorName {get; private set;}
	String ISBN {get; private set;}

	Public Book(string name, string publisher, 
	    DataTime publishedDate, string authorName, string isbn)
    {
        Name = name;
        Publisher = publisher;
        PublishedDate = publishedDate;
        AuthorName = authorName;
        ISBN = isbn;
    }
}

Возможный пользовательский интерфейс для выполнения поиска по книгам:

Поиск в DataTable DataGridView GridView

Мы можем задать название книги (поле Name), издателя (поле Publisher), дату издания (поле PublishedDate) и имя автора (поле AuthorName).

При нажатии на кнопку "Refresh" вызывается обработчик события Refresh_btn_Click:

Refresh_btn_Click(object sender, EventArgs e)
{	
    Book myBook = new Book(name_txbx.Text, publisher_txbx.Text, 
        publishedDate_txbx.Text, author_txbx.Text, null);
    MyDataGridView.DataSource = GetSearchedBooks(myBook);
}

Метод GetSearchedBooks:

public List<Book> GetSearchedBooks(Book book)
{         
    string filter = 
        "Parent(FK_Books_Items).Name " + 
        "Like '%" + book.Name + "%' AND " + 
        "Parent(FK_Books_Authors).Name Like '%" +
        book.AuthorName + "%' AND " +
        "Parent(FK_Books_Items).Publisher Like '%" + 
        +book.Publisher + "%' AND " + 
        "Convert(Parent(FK_Books_Items)" +
        ".PublishedDate, 'System.String') " + 
        "Like '%" + book.PublishedDate + "%'";
            
    DataRow[] searchedBooks = 
        bookDataSet.Books.Select(filter);

    if(searchedBooks == null)
        return null;    
      
    List<Book> books = new List<Book>();

    foreach (DataRow searchedBook in searchedBooks)
        {
            books.Add(
                new Book(searchedBook.
                   GetParentRow("FK_Books_Items")
                ["Name"].ToString(), 
                searchedBook.
                   GetParentRow("FK_Books_Items")
                ["Publisher"].ToString(),
                searchedBook.
                   GetParentRow("FK_Books_Items")
                ["PublishedDate"].ToString(), 
                searchedBook["ISBN"].ToString(), 
                searchedBook.
                   GetParentRow("FK_Books_Authors")
                ["Name"].ToString()));
        }
        
    return books;
}

В данной статье самым интересным и есть метод GetSearchedBooks.

Разберем сперва строку фильтра:

string filter = 
    "Parent(FK_Books_Items).Name Like '%" + 
    book.Name + "%' AND Parent(FK_Books_Authors)" +
    ".Name Like '%" + book.AuthorName + "%'" +
    " AND Parent(FK_Books_Items).Publisher Like '%" +
    book.Publisher + "%' AND " +
    "Convert(Parent(FK_Books_Items).PublishedDate," +
    "'System.String') Like '%" +book.PublishedDate+ "%'";

Доступ к названию книги выполняется с помощью конструкции Parent(FK_Books_Items).Name – используем метод Parent с указанием имени связи. Так мы получили родительскую таблицу Items. А .Name получили значение поля Name.

Аналогично получаем значения полей из связанной родительской таблицы Authors:

Parent(FK_Books_Authors).Name.

Относительно сравнения даты издания, то тут мы применили конвертацию типов с помощью функции Convert:

Convert(Parent(FK_Books_Items).PublishedDate, 'System.String').

При создании объекта Book мы также воспользовались именами связей между таблицами для доступа к значениям соответствующих полей родительских таблиц через метод GetParentRow:

books.Add(
   new Book(searchedBook.GetParentRow("FK_Books_Items")
           ["Name"].ToString(),
       searchedBook.GetParentRow("FK_Books_Items")
           ["Publisher"].ToString(),
       searchedBook.GetParentRow("FK_Books_Items")
           ["PublishedDate"].ToString(),
       searchedBook["ISBN"].ToString(),
       searchedBook.GetParentRow("FK_Books_Authors")
           ["Name"].ToString())
        );

Соответственно, для доступа к дочерним таблицам используется метод GetChildeRow, или GetChildeRows.

Методы GetParentRow и GetParentRows возвращают одну запись из родительской таблицы и массив записей соответственно в зависимости от типа внешней связи (один к одному/один ко многим). То же справедливо по отношению методов GetChildeRow и GetChildeRows.

Также, если мы хотим выполнять метод Select для таблицы с учетом значений в дочерних таблицах, то для доступа к полям дочерней таблицы следует использовать функцию Child:

string filter = 
    "Child(FK_Books_Items).ISBN Like '%" + book.ISBN +
    "%' AND Name Like '%" + book.Name + "%'";
            
DataRow[] searchedBooks = bookDataSet.Items.Select(filter);

Уверен, после данных разъяснений многие ваши запросы на поиск примут гораздо меньший объем кода и более эффектный вид.



Больше информации читайте по теме:

DataView - фильтр по DataTable на с#
Закрашивание ячейки строки в DataGridView на c#
c# - Поиск ячеек/строк по DataGridView
Вывод в названия колонок DataGridView сторонние значения (не из свойства ColumnName) с помощью c#
Объект CurrencyManager – получение текущей (активной) строки в DataGridView на C#
Автоматическое слежение активной ячейки в DataGridView за перемещением курсора мыши на c#
Получение текущей ячейки в DataGridView при вызове контекстного меню на c#
Значения по умолчанию новой строки DataGridView
Привязка (заполнение) элементов ListBox объектом SqlDataReader
Чтение (выборка) из БД Sql-Server двоичных данных (графического изображения)
Запись (занесение) изображения в БД SQL Server
Добавление и редактирование данных в типизированные DataTable
Импорт csv-данных в DataSet
Импорт sql-данных в формат .csv



Оценить статью:

Оценивая статью, Вы подсказываете нам насколько данная информация стала полезной именно для Вас. Мы ожидаем, прежде всего, оценку доступности материала для понимания и простоты его изложения. Дополнительные комментари, вопросы, дополнения и замечания Вы можете указать на странице От Вас

Частичное, или полное копирование материала данной статьи возможно лишь при размещении ссылки на данную страницу.


            
        




Имя:  


Текст комментариев (не больше 600 знаков):  
введите не более 600 знаков



Введите символы с картинки:
Капча имеет "срок годности". Поэтому, если необходимо обновите страницу.



Сантехник срочно
c# курс Гудок   курс по ASP.NET Гудок   курс по ADO.NET Гудок   курс по XML txt Гудок   курс по рефлексии и многопоточности Гудок