Главная страница статей --> Хитрости при программировании php, заметки по базам данных

Создание приложения, работающего с XML-данными - 2

Источник: realcoding.net

Введение


Окончание статьи Создание приложения, работающего с XML-данными. Рассмотрено редактирование, удаление и добавления таблиц (или элементов в терминах информационного множества XML Infoset).


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


Создание формы редактирования


Добавим новую форму, с помощью которой будем редактировать таблицы: Project -> Add Windows Form. Назовем форму как EditTable (для этого достаточно при создании форму назвать файл с ее классом EditTable.cs).


Поместим слева на форму ListBox и назовем его listColumns - он будет отображать поля редактируемой таблицы. Также добавим следующие текстовые поля на форму:


txtName - имя редактируемой таблицы

txtCaption - заголовок, редактируемого столбца

Добавим список ComboBoxType - comboBoxType - он будет содержать типы данных .NET. Инициализируем его свойство Items следующими значениями


System.String

System.Int32

System.Double

Ну и хватит, пожалуй.


Добавим на форму следующие кнопки


btnAddColumn - добавление нового поля.

btnEdit - сохранение изменений редактируемого поля

btnRemoveColumn - удаление поля.

btnOK и btnCancel - ну их смысл очевиден. Если нажимаешь OK все изменения сохраняются, Cаncel - изменения отменяются. Присвоим свойству DialogResult кнопки btnOK значение OK, а для кнопки btnCancel - значение Cancel.

Добавим метод UpdateListColumns() - он будет выводить список полей таблицы в listColumns.

//Обновление списка полей таблицы

private void UpdateListColumns()

{

listColumns.Items.Clear();

foreach(
DataColumn col in table.Columns)

{

listColumns.Items.Add(col.Caption);

}

}

Переопределим конструктор таблицы, который теперь будет принимать объект DataTable - редактируемую таблицу:

public EditTable(DataTable table)

{

InitializeComponent();

this.table = table;

this.UpdateListColumns();

txtName.Text = table.TableName;

}

Добавим обработчик события Leave - потеря фокуса - текстового поля txtName. В нем мы будем изменять имя таблицы:

//Изменение имени таблицы

//на потерю фокуса поля с этм именем

private void txtName_Leave

(object sender, System.EventArgs e)

{

table.TableName = txtName.Text;

}

Определим код обработчика Click книпоки btnAddColumn (как вы помните для добавления обработчика события нажатия кнопки достаточно кликнуть по ней два раза в дизайнере формы)

//Добавление поля

private void dtnAddColumn_Click

(object sender, System.EventArgs e)

{

//Создание нового поля

//и определение его заголовка

DataColumn col =

new
DataColumn(txtCaption.Text);

//Определение типа поля

col.DataType =

Type.GetType(comboBoxType.Text);

//добавление поля

table.Columns.Add(col);

//обновление списка полей

this.UpdateListColumns();

}

Редактирование колонки - btnEdit

//Правка текущего поля

private void btnEdit_Click

(object sender, System.EventArgs e)

{

DataColumn col = table.

Columns[listColumns.SelectedItem.ToString()];

//Если есть данные - возникнет

//исключение на изменение типа поля

if(table.Rows.Count == 0)

{

col.DataType =

Type.GetType(comboBoxType.Text);

}

col.Caption = txtCaption.Text;

this.UpdateListColumns();

}

Удаление колонки - btnRemoveColumn

//удаление поля

private void btnRemoveColumn_Click

(object sender, System.EventArgs e)

{

table.Columns.Remove

(listColumns.SelectedItem.ToString());

//обновление списка полей

this.UpdateListColumns();

}

Добавим обработчик события SelectedIndexChanged списка полей таблицы listColumns

//Отображение данных текущего поля

private void

listColumns_SelectedIndexChanged

(object sender, System.EventArgs e)

{

txtCaption.Text = table.Columns

[listColumns.SelectedItem.

ToString()].Caption;

comboBoxType.Text = table.Columns

[listColumns.SelectedItem.

ToString()].DataType.ToString();

}

Вот и все форма готова.


Добавление меню редактирования на главную форму.

Теперь в главной форме приложения надо добавить меню Edit и добавить для него пункты:

Delete Table

Add Table

Edit Table

Определим их обработчики. При удалении таблицы достаточно удалить текущий объект DataTable из объекта DataSet.


При добавлении таблицы добавляем в объект DataSet новую таблицу и вызываем нашу форму редактирования EditTable для редактирования новой таблицы. Потом отслеживаем какая кнопка формы редактирования была нажата. Если "OK" - таблицу добавляем, если "Cancel" - не добавляем.


Аналогично, для редактирования таблицы - вызываем офрму редактирования. Если нажата кнопка "OK" -изменения сохраняем.

//Удаление таблицы

private void menuItemDelete_Click

(object sender, System.EventArgs e)

{

//Удаление таблицы из dataSet

dataSet.Tables.Remove

(listTables.SelectedItem.ToString());

//Применение изменений

dataSet.AcceptChanges();

//Обновление списка таблиц

this.UpdateTableList();

}


//Добавление таблицы

private void menuItemAdd_Click

(object sender, System.EventArgs e)

{

DataTable table =

new
DataTable(DateTime.Now.ToString());

EditTable editForm = new EditTable(table);

//Открываем окно редактирования новой таблицы

if(editForm.ShowDialog() == DialogResult.OK)

{

//Если нажата кнопка OK

//сохраняем изменения в dataSet

dataSet.Tables.Add(table);

dataSet.AcceptChanges();

this.UpdateTableList();

}

else

{

//Иначе отбрасываем изменения

dataSet.RejectChanges();

}

}


//Правка текущей таблицы

private void menuItemEditTab_Click

(object sender, System.EventArgs e)

{

DataTable table = dataSet.Tables

[listTables.SelectedItem.ToString()];

EditTable editForm = new EditTable(table);

if(
editForm.ShowDialog() == DialogResult.OK)

{

dataSet.AcceptChanges();

this.UpdateTableList();

}

else

{

dataSet.RejectChanges();

}

}

Заключение


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



Похожие статьи:
- Установка и конфигурация веб сервера Apache с поддержкой PHP, JSP и MySQL на Windows XP
- Установка и конфигурация веб сервера Apache с поддержкой PHP, JSP и MySQL на Windows XP
- Парсинг на Perl
- Perl & XML. Библиотека программиста
- Генерация контента сайта с использованием Template Toolkit
- Использование модуля для работы с шаблонами. Часть 2.
- Модуль Apache mod_rewrite
- Модуль Apache mod_rewrite
- Включите графику!!!
- Фильтры DHTML
- Поиск по сайту - статичный контент (Perl)
- Как подружить интерпретатор Perl с Homesite
- Работа с MS Access в PHP


Оглавление | Обсудить на форуме | Главная страница сайта | Карта сайта |

Контакты
Редакция:
[0.001]