![](/img/CyberPedia.jpg)
Двойное оплодотворение у цветковых растений: Оплодотворение - это процесс слияния мужской и женской половых клеток с образованием зиготы...
Археология об основании Рима: Новые раскопки проясняют и такой острый дискуссионный вопрос, как дата самого возникновения Рима...
Топ:
Комплексной системы оценки состояния охраны труда на производственном объекте (КСОТ-П): Цели и задачи Комплексной системы оценки состояния охраны труда и определению факторов рисков по охране труда...
Процедура выполнения команд. Рабочий цикл процессора: Функционирование процессора в основном состоит из повторяющихся рабочих циклов, каждый из которых соответствует...
Проблема типологии научных революций: Глобальные научные революции и типы научной рациональности...
Интересное:
Отражение на счетах бухгалтерского учета процесса приобретения: Процесс заготовления представляет систему экономических событий, включающих приобретение организацией у поставщиков сырья...
Принципы управления денежными потоками: одним из методов контроля за состоянием денежной наличности является...
Что нужно делать при лейкемии: Прежде всего, необходимо выяснить, не страдаете ли вы каким-либо душевным недугом...
Дисциплины:
![]() |
![]() |
5.00
из
|
Заказать работу |
|
|
Если у вас мало времени, то этот параграф можно пропустить и перейти к параграфу " Поиск в 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 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!