// This overload prints values in the table or DataView.
Console.WriteLine("\n" + label);
for(int i = 0; i<view.Count;i++)
{
Console.WriteLine("\table" + view[i]["item"]);
}
Console.WriteLine();
}
3. Функция DemonstrateDataView(), в которой содержится создание и заполнение DataTable начальными данными, создание объектов DataView, добавление данных через DataView. Рассмотрим данную функцию более подробно.
Создадим таблицу «table» состоящую из одного столбца типа String.
DataTable table = new DataTable("table");
DataColumn colItem = new DataColumn("item",
Type.GetType("System.String"));
table.Columns.Add(colItem);
Заполним ее 5 записями.
for (int i = 0; i < 5; i++)
{
NewRow = table.NewRow();
NewRow["item"] = "Item " + i;
table.Rows.Add(NewRow);
}
Изменим 2 произвольные записи, и подтвердим изменения.
table.Rows[0]["item"] = "cat";
table.Rows[1]["item"] = "dog";
table.AcceptChanges();
Создадим 2 объекта DataView для таблицы table.
DataView firstView = new DataView(table);
DataView secondView = new DataView(table);
Установим firstView для отображения предыдущих значений измененных записей, а secondView для отображения новых записей и значений редактированных записей.
Проверим работу DataView. Для этого изменим значение одной из записей, но не будем подтверждать изменения, и добавим новую запись в таблицу. И выведем результаты на экран.
PrintTableOrView(table, "Current Values in Table");
Запустим пример, и посмотрим что будет выведено на экран.
Рис. 1. Скриншот работы примера №1
На данном примере видно удобство использование DataView для частичного вывода записей таблицы.
Простой пример взаимодействия автономного DataTable и DataView
Представим себе ситуацию, когда у нас в приложении есть объект DataTable и мы хотим с помощью DataView выводить отсортированные либо отфильтрованные данные. Для этого нам необходимо:
DataTable – в которым будут храниться данные;
DataView – с полем DefaultView, связанным с DataTable;
Данный пример представляет собой консольное приложение. Метод GetTable осуществляет инициализацию переменной table типа DataTable представляющую из себя таблицу, состоящую из трех полей: Индекс, Страну и Название города. Данные таблицы могут считываться из БД, заполняться пользователем, или как было сделано в этом примере, заполняться программно. Код приложения состоит из двух частей – вывод данных на экран отсортированных по умолчанию, и сортировку по произвольному полю, к примеру, по Названию города.
Рис. 2. Скриншот работы консольного приложения из примера №2
Более сложный пример с возможностью добавления записей и поиска
Создадим Windows приложение с простым интерфейсом, состоящим из двух компонентов DataGrid (для вывода данных DataTable и DataView), двух текстовых полей (первое – ввода строки для добавления, второе – для отображения индекса текущей строки), и набора кнопок (для выполнения действий по добавлению записей, поиска, и навигации).
Рис. 3. Интерфейс визуального приложения
Данное приложение позволяет нам просматривать данные. Также существует возможность добавления данных. Для добавления новой строки следует ввести название города в первое текстовое поле и нажать кнопку «Добавить». Новая строка сразу же отобразиться в таблице на панели «DataView».
Рис. 4. Добавление записи через DataView
Однако добавление новой записи в таблицу становится возможным лишь после явного завершения редактирования предыдущей записи. Без этого попытки создания новой записи блокируются. Завершить редактирование можно командой EndEdit(), принять изменения - AcceptChanges(). Эти действия выполняются при нажатии кнопки «Добавить строку» на панели «DataTable».
Рис. 5. Добавление строки в DataTable
На данном примере мы рассмотрели возможность добавления новых записей через объекты класса DataView.