
|
|
ASP.NET документация. Создаем приложение, работающее с XML-данными.
В последнее время завовевывает популярность новый формат данных - XML. Одним из его достинств является то, что это самописываемый формат данных, что значительно облечает работу с ним. Тем не менее, многих все еще пугает само слвово "XML". В этой статье я постараюсь доказать простоту и удобтво работы с XML-данными на примере приложения, которое отображает XM_-данные в удобной человеку форме и позволяет редактировать их. Для начала не будем забираться в дебри пространства имен System.XML, а обойдемся объектом DataSet пространства имен System.Data. У объекта DataSet есть два замечательных метода: ReadXml() и WriteXml() - первый считывает данные в формате XML в объект DataSet, а второй их выводит. Эти методы перегружены, и позволяют вам как считать данные из файла на диске, или из потока Stream в оперативной памяти, так и вывести как в файл на диске, так и в Stream. Подготовка формыИтак приступим к созданию приложения. Для этого создадим новый C#-проект Windows Application. (File - New - Projects в Visual Studio .NET). Теперь приступим к подготовке формы:
Затем поместим на форму еще три компонента (после помещения на форму они отобразятся ПОД формой): MainMenu - главное меню приложения, назовем его как mainMenu. OpenFileDialog - диалог открытия файла. Назовем его openFileDialog. SaveFileDialog - диалог сохранения файла. Понятно, что его будем звать saveFileDialog. Написание кодаДобавим новую переменную dataSet в класс формы private DataSet dataSet; Добавим функцию UpdateListtables(), которая будет обновлять список таблиц в listTables. Для этого она будет просто пробегать по списку таблиц в dataSet и отображать их имена в listTables. //Обновление списка таблиц
private void UpdateTableList()
{
//Очищаем список таблиц
listTables.Items.Clear();
//Пробегаемся по таблицам dataSet
foreach(DataTable table in dataSet.Tables)
{
listTables.Items.Add(table.TableName);
}
if(listTables.Items.Count > 0)
listTables.SelectedIndex = 0;
}
Затем в конструкторе нашей формы проинициализируем наши компоненты. Свою форму я назвал как DataXmlForm, следовательно конструктор зовется DataXmlForm(). public DataXmlForm()
{
InitializeComponent();
//Обавляем фильтр для fileOpenDialog
openFileDialog.Filter =
"XML - files (*.xml)|*.xml|All files (*.*)|*.*";
//Говорим ему воостанавливать последнюю диреторию
openFileDialog.RestoreDirectory = true;
saveFileDialog.Filter =
"XML - files (*.xml)|*.xml|All files (*.*)|*.*";
saveFileDialog.RestoreDirectory = true;
//Создаем новый DataSet
//точнее вызываем его контсруктор
dataSet = new DataSet();
}
Теперь будем работать с mainMenu. Набирая наименование пункта в меню в поле, где написано "Type here", мы можем добавить новый пункт. Итак добавим корневой пункт - File, назовем его menuItemFile. Кликаем по неиу один раз и в раскрывшемся ниже списке добавляем пункты Open (имя - menuItemOpen), Save (menuItemSave), Close (menuItemClose). Кликая два раза по нужному пункту меню, мы можем добавить обработчик. Итак кликнем по 2 раза по пунктам "Open", "Save", "Close" и добавим обработчики на них. В обработчике пункта меню Open будет следующее: //Открытие файла
private void menuItemOpen_Click
(object sender, System.EventArgs e)
{
if(openFileDialog.ShowDialog() ==
DialogResult.OK)
{
//Считывание XML - данных в dataSet
dataSet.ReadXml(openFileDialog.FileName);
//Принятие изменений dataSet
dataSet.AcceptChanges();
//Обновление списка таблиц
this.UpdateTableList();
//Изменение заголовка окна
this.Text = "Data Xml "+openFileDialog.FileName;
}
}
Если мы выбираем какой-либо файл, то он считывается в dataSet. Аналогично сохранение файла, а закрытие программы, вообще, можно оставить без комментариев - настолько оно просто: //Сохранение XML-данных
private void menuItemSave_Click
(object sender, System.EventArgs e)
{
saveFileDialog.FileName = openFileDialog.FileName;
if(saveFileDialog.ShowDialog() == DialogResult.OK)
{
//Запись XML-данных из dataSet на диск
dataSet.WriteXml(saveFileDialog.FileName);
//Обновление заголовка окна
this.Text = "Data XML "+saveFileDialog.FileName;
}
}
//выход из приложения
private void menuItemClose_Click
(object sender, System.EventArgs e)
{
Application.Exit();
}
Далее нам необходимо, чтобы при выделении таблицы в listTables, она отображалась в dataGrid. Для добавления обработчика дважды кликаем по listTables. Чтобы показать dataGrid'у откуда брать данные воспользуемся свойством DataSource, в котором укажем dataSet. А чтобы показать какую именно таблицу отображать из dataSet используем свойство DataMember: //Изменение отображаемой таблицы
private void listTables_SelectedIndexChanged
(object sender, System.EventArgs e)
{
//указываем источник данных dataGrid
dataGrid.DataSource = dataSet;
//указываем отображаемую таблицу
dataGrid.DataMember = listTables.SelectedItem.ToString();
//имзеняем заголовок dataGrid
dataGrid.CaptionText =listTables.SelectedItem.ToString();
}
Итак мы получили практически готовое приложение, которое позволяет отображать и редактировать XML-данные. |
![]() |