Методы Find и FindRows класса DataView — КиберПедия 

Общие условия выбора системы дренажа: Система дренажа выбирается в зависимости от характера защищаемого...

Таксономические единицы (категории) растений: Каждая система классификации состоит из определённых соподчиненных друг другу...

Методы Find и FindRows класса DataView

2022-09-11 26
Методы Find и FindRows класса DataView 0.00 из 5.00 0 оценок
Заказать работу

Если определено свойство Sort объекта DataView, то с помощью метода Find можно найти определенную строку таблицы, но только на основе данных той колонки, для которой был установлено свойство Sort. Например.

DataView view = new DataView(ds.Tables[0]) { Sort = "Name" };

int n = view.Find("Charlie Parker"); // Здесь не может быть задан адрес, или другое поле (только имя)

string s = "Row not found!";

if (n!= -1)

s = view[n]["Name"] + ", home address: " + view[n]["Addr"];

Console.WriteLine (s);

Метод FindRows помогает отыскать множество строк, удовлетворяющих критерию поиска. Этот метод также работает с колонкой, по которой был отсортирован образ таблицы.

// Образ таблицы экзаменов

view = new DataView(ds.Tables[1]) { Sort = "Mark" }; // Сортировка по полю "оценка" за экзамен

DataRowView[] drv = view.FindRows("3"); // FindRows возвращает все тройки, полученные на экзаменах

foreach (DataRowView rv in drv)

Console.WriteLine(rv["StudID"] + ". " + rv["Course"]);

Класс DataRowView, также как и DataRow, имеет методы BeginEdit, EndEdit, CancelEdit, и Delete. Эти методы позволяют работать со строками и с отдельными полями данных. Строки можно добавлять, редактировать и удалять. Добавление новой строки, в отличие от DataRow, происходит только после выполнения метода EndEdit. Рассмотрим примеры.

DataTable dt = ds.Tables[0];

DataView view = new DataView(dt);

 

DataRowView rv = view.AddNew(); // Добавим новую строку

rv["Name"] = "Art Pepper";  // Работает индексатор

rv["Phone"] = "555-7799";

rv["Addr"] = "North st. 33";

rv.EndEdit();

//====== Проверка результата

int last = dt.Rows.Count - 1;

Console.WriteLine (dt.Rows[last]["Name"]);

 

// rv = view[last]; // Имитируем обновление текущей строки DataRowView

rv.BeginEdit();     // Редактируем текущую строку

rv ["Name"] = "Art Pepper Junior";

rv.EndEdit();

//====== Проверка результата

Console.WriteLine (dt.Rows[last]["Name"]);

 

rv.Delete();

//====== Проверка результата

Console.WriteLine (dt.Rows[dt.Rows.Count-1]["Name"]);

Думаю, что вы догадались, как наиболее просто проверить эти фрагменты кода. Их можно временно вставить в конец метода Open, где DataSet и его таблицы уже инициализированы.

Метод CreateChildView класса Data Row View позволяет создать новый объект DataView, который является выборкой строк связанной таблицы. В этой выборке содержатся только те строки, которые соответствуют текущей строке главной таблицы. Метод CreateChildView в качестве параметра должен получить либо ссылку на объект DataRelation, либо имя связи между таблицами. Следующий пример иллюстрирует сказанное.

DataView view = new DataView(ds.Tables[0]);

DataView cv = view[0].CreateChildView(ds.Relations[0]);

Console.WriteLine(view[0]["Name"] + "'s exams from the table " + cv.Table.TableName);

for (int i = 0; i < cv.Count; i++)

Console.WriteLine (cv[i]["Course"] + ", " + cv[i]["Mark"]);

Задание

Реализуйте реакцию на нажатие кнопки btnFindView. Создайте образ выбранной таблицы (DataView). Образ должен быть отфильтрован с учетом критерия поиска, заданного в строке comboFind. В процессе обработки события (программным способом) создайте DataGridView grid, поместите его в форму formFound и привяжите его к данным образа таблицы DataView. Для объекта grid добавьте обработку события CellEnter. В реакции на это событие выделяйте цветом те строки таблиц главного окна, которые соответствуют выделенной строке DataGridView вспомогательного окна formFound.

Например, если grid в окне formFound отображает результаты экзаменов и в нем активна строка, соответствующая ID=17 studID=4, то в gridStud и gridExam должны быть выделены строки, соответствующие studID=4 и ID=17, как показано на рисунке. Перемещение фокуса вверх и вниз по строкам grid в форме formFound должно отслеживаться в обеих таблицах главного окна. Таким образом, пользователь видит как данные студента, экзамен которого отбражен в выделенной строке grid (окна поиска), так и информацию о самом экзамене.

Все предыдущие режимы поиска должны работать, как и прежде. Вспомогательная форма должна создаваться вновь при переключении режимов поиска (ListView или DataGridView). Стиль вспомогательной таблицы grid должен изменяться в зависимости от типа активной таблицы в главном окне.


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

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

Индивидуальные очистные сооружения: К классу индивидуальных очистных сооружений относят сооружения, пропускная способность которых...

Биохимия спиртового брожения: Основу технологии получения пива составляет спиртовое брожение, - при котором сахар превращается...

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



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

0.008 с.