foreach (XmlNode node in nodes)
WriteChildren(node);
Так как узлы первого уровня содержат вложенные узлы, то для отображения иерархической структуры документа необходим рекурсивный проход вглубь дерева, который и реализован в методе WriteChildren. Не забудьте вставить вызов метода ShowXml внутрь MainForm_Load.
ShowXml(@"\Students.xml");
Компонент XmlRichTextBox можно инициализировать значительно проще, без процедуры синтаксического разбора, но тогда мы потеряем цветовое форматирование и точное имя таблицы. Рассмотрим этот вариант. В методе ShowXml класса MainForm временно замените вызов box.ShowXml(FindAFile(fileName), "/StudentsList"); следующим кодовым фрагментом.
DataSet ds = new DataSet();
ds.Tables.Add ((gridStud.DataSource as BindingSource).DataSource as DataTable);
box.Text = ds.GetXml();
Здесь иллюстрируется метод GetXml() класса DataSet. Он возвращает представление всего набора данных в виде текстовой строки. Эта строка является XML-представлением набора данных DataSet. Имена NewDataSet и Table1 были автоматически сгенерированы объектом DataSet.
Заметьте, что наш компонент здесь не работает, точнее работает только его родительский класс RichTextBox. Свойство Text позволяет задать содержимое окна RichTextBox. Если бы у нас имелся текст в формате RTF, то содержимое окна можно было бы задать с помощью свойства Rtf, а не Text.
Упорядочить и отфильтровать данные можно двумя способами: с помощью метода Select класса DataTable или с помощью настроенного на фильтрацию объекта класса DataView. Действие последнего напоминает действие объекта VIEW SQL-сервера или Access. Объект класса DataView содержит некое отобранное (отфильтрованное) подмножество данных, хранимых в DataTable и позволяет сортировать его по какому-либо из полей.
Рассмотрим, как работать с DataView (образом таблицы) на примере учебной базы данных Northwind.mdb. Вы найдете ее в папке с материалами курса.
· Создайте новый проект OleDBSort, или скопируйте предыдущий,
· В случае нового проекта добавьте на форму DataGridView с именем grid, добавьте метку с текстом City: и выпадающий список — comboCity. Мы наполним его именами городов из таблицы Customers.
· Введите в класс формы переменную: DataView dv; и переменную BindingSource bs;
· Добавьте реакцию формы (если ее нет) на событие Load и SelectedIndexChanged для списка comboCity.
· Принесите в папку Data файл с базой данных Northwind.mdb.
Мы собираемся предоставить пользователю возможность выбирать в списке ComboBox город (поле City таблицы Customers) и использовать его для фильтрации строк таблицы. Объект DataView должен содержать только те строки таблицы, которые соответствуют клиентам, живущим в выбранном городе.
· Скорректируйте метод MainForm_Load так, чтобы он создал соединение с базой Northwind.
· В метод ConnectAndRead введите код, показанный ниже.
void ConnectAndRead()
{
cn.Open();
IDbCommand cmd = new OleDbCommand("SELECT * FROM Customers", cn);
IDataReader reader = cmd.ExecuteReader();
DataTable dt = new DataTable("Customers");
dt.Columns.Add("Name"); dt.Columns.Add("City");
dt.Columns.Add("Phone"); dt.Columns.Add("Company");
while (reader.Read())
{
DataRow row = dt.NewRow();
row["Name"] = reader["ContactName"];
row["City"] = reader["City"];
row["Phone"] = reader["Phone"];
row["Company"] = reader["CompanyName"];
dt.Rows.Add(row);
}
comboCity.DataSource = dt;
comboCity.DisplayMember = "City";
comboCity.ValueMember = "City";
comboCity.SelectedIndex = -1;
comboCity.SelectedIndexChanged += new EventHandler(comboCity_SelectedIndexChanged);
dv = new DataView(dt);
bs = new BindingSource(dv, "");
bn.BindingSource = bs;
grid.DataSource = bs;
reader.Close();
cn.Close();
}
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.