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

Эмиссия газов от очистных сооружений канализации: В последние годы внимание мирового сообщества сосредоточено на экологических проблемах...

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

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

2022-09-11 24
Методы 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.006 с.