Существует множество задач, предполагающих ввод данных в виде таблиц. Конечно, можно эту таблицу программировать как совокупность текстовых полей TextBox, но часто заранее неизвестно, сколько рядов данных будет вводить пользователь, необходимо предусмотреть скроллинг этой таблицы и т. д. То есть проблем в организации ввода табличных данных достаточно много.

Мы предлагаем для цели ввода табличных данных использовать элемент управления DataGridView (сетка данных). Прежде всего, этот элемент управления предназначен для отображения данных, которые удобно представить в виде таблицы, чаще всего источником этих данных является база данных. Однако кроме отображенияDataGridView позволяет также редактировать табличные данные. Элемент управления DataGridView поддерживает выделение, изменение, удаление, разбиение на страницы и сортировку.

Программа, обсуждаемая в данном разделе, предлагает пользователю заполнить таблицу телефонов его знакомых, сотрудников, родственников, любимых и т. д. После щелчка на кнопке Запись данная таблица записывается на диск в файл в формате XML. Для упрощения текста программы предусмотрена запись в один и тот же файл C:\tabl.xml. При последующих запусках данной программы таблица будет считываться из файла, и пользователь может продолжать редактирование таблицы. Поэтому эту программу можно громко назвать табличным редактором. Щелкая мышью на заголовках колонок, можно расположить записи в колонках в алфавитном порядке для удобного поиска необходимого телефона.

Для написания программы требуется из панели управления Toolbox перенести мышью элемент управления DataGridView и кнопку Button. Текст программы приведен чуть ниже:

[code]PublicClass Form1
Dim dt AsNew DataTable‘ — создание объекта таблица данных
Dim ds AsNew DataSet‘ — создание объекта набор данных
PrivateSub Form1_Load(ByVal senderAs System.Object,ByVal e As System.EventArgs) Handles MyBase.Load
MyBase.Text = "Почти табличный редактор"
Button1.Text ="Запись"
If IO.File.Exists("C:\tabl.xml") = False Then
‘ Если XML-файла НЕТ:
DataGridView1.DataSource = dt
‘ Заполнение шапки таблицы:
dt.Columns.Add("Имена")
dt.Columns.Add("Номера телефонов")
‘ Добавить объект dt в DataSet:
ds.Tables.Add(dt)
Else ‘ Если XML-файл ЕCТЬ:
ds.ReadXml("C:\tabl.xml")
DataGridView1.DataMember = "Название таблицы"
DataGridView1.DataSource = ds
End If
End Sub
Private SubЗАПИСЬ(ByVal sender As System.Object,ByVal e As System.EventArgs) Handles Button1.Click
dt.TableName = "Название таблицы"
ds.WriteXml("C:\tabl.xml")
EndSub
EndClass[/code]

Как видно из текста программы, потребовалось всего лишь несколько строк программного кода для создания такой многофункциональной программы. Это стало возможным благодаря использованию мощной современной технологии ADO.NET. В начале класса объявлены два объекта этой технологии: «набор данных» DataSetи «таблица данных» DataTable. Объект DataSet является основным компонентом архитектуры ADO.NET. DataSet представляет кэш данных, расположенный в оперативной памяти. DataSet состоит из коллекции объектовDataTable. То есть в один объект DataSet может входить несколько таблиц, а информацию о них мы можем записывать в файл на диск одним операторомWriteXml, соответственно читать — ReadXML. Таким образом, в этой программе мы имеем дело преимущественно с тремя объектами: DataSet — кэш данных, DataTable — представляет одну таблицу с данными и DataGridView — элемент управления для отображения данных.

При загрузке формы Form1_Load мы обработали две ситуации. Если файла, в который мы пишем информацию о таблице, не существует Exists(«C:\tabl.xml») = False, то назначаем в качестве источника данных DataSource для DataGrid объект класса DataTable и заполняем «шапку» таблицы, т. е. указываем названия колонок: «Имена» и «Номера телефонов», а затем добавляем объект DataTable в объект DataSet. Теперь пользователь видит пустую таблицу с двумя колонками и может ее заполнять. Если файл существует (ветвь Else), то данные в объект DataSet отправляем изXML-файла (ReadXML). Здесь уже в качестве источника данных для DataGrid указываем объект DataSet.

При щелчке мышью на кнопке Запись — событие Button1.Click — происходит запись XML-файла на диск (WriteXml).

Здесь используются так называемые XML-файлы. Формат этих файлов позволяет легко и надежно передавать данные посредством Интернета даже на компьютеры другой платформы (например, Macintosh). В нашей задаче мы не ставили перед собой цель работать в Интернете, а всего лишь воспользовались данной технологией. XML-файл можно просмотреть Блокнотом или с помощью MS Word, поскольку это текстовый файл. Однако следует учесть, что этот файл записан в кодировке UTF-8, поэтому другими текстовыми редакторами, например edit.com или Rpad32.exe (русский Блокнот), его прочитать затруднительно. XML-документ открывается Web-браузером, MS Front Page и другими программами, при этом отступы и разные цвета позволяют выразительно увидеть структуру данного файла. XML-файл можно открыть табличным редактором MS Excel, и при этом он может отобразиться в виде таблицы.

При использовании нами XML-файлов для данной задачи программирования простейшего табличного редактора совсем необязательно вникать в его структуру, тем более что при выборе имени файла при сохранении совершенно необязательно устанавливать расширение файла xml, файл с любым расширением будет читаться методом ReadXml, как XML-файл.

Программист может иметь доступ к полям таблицы. Например, доступ к левой верхней ячейке (полю) таблицы можно получить, используя свойство объекта DataTable:dt.Rows.Item(0).Item(0). Однако запись этого поля, например, в последовательный файл будет некорректной даже при использовании дополнительной переменной из-за того, что технология ADO.NET предусматривает кэширование данных. Таким образом, чтение и запись данных для подобных таблиц следует организовывать только через методы объекта DataSet.

Замечу, что данная программа может также являться инструментом для создания XML-файлов.