Поиск в таблице DataTable и в компоненте DataGridView — КиберПедия 

Механическое удерживание земляных масс: Механическое удерживание земляных масс на склоне обеспечивают контрфорсными сооружениями различных конструкций...

Особенности сооружения опор в сложных условиях: Сооружение ВЛ в районах с суровыми климатическими и тяжелыми геологическими условиями...

Поиск в таблице DataTable и в компоненте DataGridView

2022-09-11 35
Поиск в таблице DataTable и в компоненте DataGridView 0.00 из 5.00 0 оценок
Заказать работу

Если у вас мало времени, то этот параграф можно пропустить и перейти к параграфу " Поиск в DataGridView". Текст искомого объекта пользователь вводит, или выбирает в окне выпадающего списка comboFind. Отображение данных в DataGridView и манипуляция данными в DataSet — это две разные функции. DataGridView обеспечивает интерфейс пользователя, а архитектура привязки к данным отслеживает изменение данных в памяти. При этом важно, чтобы изменения данных в DataGridView были всегда синхронизированы с их изменениями в DataSet.

Для отбора и поиска записей в таблице класс DataTable предоставляет метод Select. С его помощью мы можем находить записи (строки) таблицы, удовлетворяющие критерию отбора, задаваемому в параметрах. Метод имеет несколько перегруженных версий. Рассмотрим синтаксис последней, самой мощной из них.

public DataRow[] Select(

string filterExpression, // Критерий фильтрации содержимого

string sort,    // Способ сортировки

DataViewRowState recordStates); // Критерий фильтрации состояния строк

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

· filterExpression — выражение, определяющее что следует искать. Оно фильтрует записи, отбрасывая те, что не удовлетворяют критерию поиска. Формат выражения сходен с оператором WHERE языка SQL.

· sort — строка текста указывающая, как сортировать найденные записи. Ее формат совпадает с тем, что используется оператором ORDER BY выражения SQL.

· recordStates — определяет состояние (версию) данных, которые необходимо найти. Этот параметр, совместно с первым, задает более сложный критерий отбора записей.

Сейчас мы попробуем использовать эту функцию для поиска строк таблицы. Добавьте в класс формы метод Find, и вызовите его в нужной ветви переключателя switch, который уже существует в toolStrip_ItemClicked.

void Find()

{

DataRow[] rows = ds.Tables[0].Select(); // Просим выбрать все записи таблицы (SQL запрос)

foreach (DataRow r in rows)

Debug.WriteLine("Found: " + r["Name"]);

}

Здесь используется самая простая версия метода Select, которая не задает критерия поиска и должна возвратить все строки таблицы. Отладочный код (Debug.WriteLine) вставлен, так как я не уверен, что все пройдет гладко. Проведите опыт для проверки метода DataTable.Select и убедитесь, что он работает и действительно возвращает массив всех строк таблицы. Исследуйте другие версии метода Select, задавая различные критерии отбора строк. Например, поочередно опробуйте следующие критерии:

DataRow[] rows = ds.Tables[0].Select ("Phone = '430-5125'"); // Задаем критерий отбора

DataRow[] rows = ds.Tables[0].Select ("Addr='Hi st., 30'"); // Другой критерий отбора

DataRow[] rows = ds.Tables[1].Select();// Все записи из второй таблицы. При этом замените имя искомого поля данных на Course

// Просим учесть выбор пользователя

DataRow[] rows = ds.Tables[0].Select ("Name='" + comboFind.Text + "'");

Последний фрагмент предполагает, что перед тем как нажать кнопку Find, вы введете в ToolStripComboBox (полное!) имя искомого студента. Обратите внимание на символы ', которые должны обрамлять значение искомого поля. При работе с этим служебным символом вы также можете использовать тот синтаксис, который был необходим в языке C++:

"Name = \'"+ comboFind.Text + "\'"

но это не обязательно. Опробуйте также более сложные критерии. Например, следующий вызов возвращает все записи таблицы S tuds, но при этом они будут отсортированы по полю Name в убывающем (descending) порядке.

DataRow[] rows = ds.Tables[0].Select ("", "Name DESC");

Если надо изменить порядок следования строк, то вместо константы DESC используйте ASC (ascending — возрастающий), но эта установка действует и по умолчанию. Если потребуется найти имя, начинающееся с определенной буквы, то можно использовать оператор сравнения LIKE языка SQL.

DataRow[] rows = ds.Tables[0].Select ("Name LIKE 'C*'");

Этот вызов выберет три строки. Для наших целей можно остановиться на варианте:

DataRow[] rows = ds.Tables[0].Select ("Name LIKE'" + comboFind.Text + "*'");

Он находит все записи, имена которых начинаются с последовательности символов, заданной пользователем в окне выпадающего списка. Приведем новый вариант метода Find, который находит все строки таблицы, удовлетворяющие этому критерию — ячейки строк таблицы, расположенные на перекрестии со столбцом Name, должны содержать текст, начинающийся с подстроки, заданной пользователем в окне в окне списка.

void Find()

{

string what = Trim(comboFind.Text);

if (what == "")

return;

 

DataRow[] rows = ds.Tables[0].Select("Name LIKE '" + what + "*'");

if (rows.Length == 0)

{

new FormMsg("Could not find Name LIKE " + what, 2000);

return;

}

if (!comboFind.Items.Contains(what))

comboFind.Items.Add(what); // Запоминаем искомую строку в ComboBox ObjectCollection

gridStud.CurrentCell = gridStud[1, (int)rows[0][0] - 1]; // Выделяем первую из найденных строк

}

Кроме маркировки ячейки, алгоритм выводит сообщение о неудаче, если поиск не дал результата. Протестируйте приложение и убедитесь, что установка свойства CurrentCell элемента DataGridView программным способом включает DataBinding и вы видите, что второй DataGridView переключается на отображение экзаменов выбранного студента. Установка свойства Selected для какой-либо строки DataGridView не делает этого, но она позволяет выделить всю строку (а не одну из ее ячеек). Протестировав работу приложения, обычно хочется внести некоторые коррективы.


Поделиться с друзьями:

История развития пистолетов-пулеметов: Предпосылкой для возникновения пистолетов-пулеметов послужила давняя тенденция тяготения винтовок...

Типы оградительных сооружений в морском порту: По расположению оградительных сооружений в плане различают волноломы, обе оконечности...

Архитектура электронного правительства: Единая архитектура – это методологический подход при создании системы управления государства, который строится...

Своеобразие русской архитектуры: Основной материал – дерево – быстрота постройки, но недолговечность и необходимость деления...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.009 с.