Опубликован: 05.08.2007 | Уровень: специалист | Доступ: платный
Лекция 11:

Типизированный объект DataSet. Чтение и запись XML-документов

Запись содержимого и структуры типизированного объекта DataSet

Содержимое объекта DataSet может быть записано в виде XML-файла. Это очень удобно для последующей передачи данных или межплатформенного взаимодействия. Для записи используется метод WriteXml, который, подобно методу ReadXml, может записывать данные в файл, в объект подкласса XmlWriter, в объект подкласса TextWriter или в поток (рис. 11.30).

 Перегруженный метод WriteXml

Рис. 11.30. Перегруженный метод WriteXml

Необязательный параметр XmlWriteMode позволяет дополнительно уточнять записываемые данные. Его значения приводятся в таблице 11.9.

Таблица 11.9. Значения параметра XmlWriteMode
Значение Описание
IgnoreSchema В XML-документ записываются только данные объекта DataSet. Если данные не загружены, документ не создается. Это значение по умолчанию
WriteSchema В XML-файл записываются данные объекта DataSet с добавлением схемы в качестве встроенного XSD-документа
DiffGram В XML-документ сохраняются первоначальные и текущие значения данных

Для записи схемы DataSet применяется метод WriteXmlSchema, который записывает данные в те же объекты, что и методы WriteXml или ReadXml (рис. 11.31):

 Перегруженный метод WriteXmlSchema

Рис. 11.31. Перегруженный метод WriteXmlSchema

Скопируйте папку приложения TypedDataSetReadXML и назовите ее "TypedDataSetReadandWriteXML". Добавляем в главное меню следующие пункты (рис. 11.32):

Name Text
mnuSave &Сохранить
mnusDiffGram Diff&Gram
mnusIgnoreSchema Ig&nore Schema
mnusWriteSchema &Write Schema
mnusSchema Cохранить схе&му
 Главное меню приложения TypedDataSetReadandWriteXML

Рис. 11.32. Главное меню приложения TypedDataSetReadandWriteXML

Из окна Toolbox перетаскиваем на форму элемент управления SaveFileDialog, в свойстве Filter вводим то же самое значение, что и для OpenFileDialog:

XML and XSD Files(*.xml, *.xsd)| *.xml; *.xsd; |All Files(*.*)|*.*

Создаем обработчик пункта меню "DiffGram", в котором устанавливаем переключатель для различных значений параметра XmlWriteMode метода WriteXml:

private void mnusDiffGram_Click(object sender, System.EventArgs e)
{
	if(saveFileDialog1.ShowDialog() == DialogResult.OK)
	{
		XmlWriteMode writeMode = XmlWriteMode.DiffGram;
		MenuItem menuItem = (MenuItem)sender;
		switch(menuItem.Index)
		{
		case 0:
		writeMode = XmlWriteMode.DiffGram;
		break;
		case 1:
		writeMode = XmlWriteMode.IgnoreSchema;
		break;
		case 2:
		writeMode = XmlWriteMode.WriteSchema;
		break;
		}
		if (dataGrid1.DataSource == null)
		{
		MessageBox.Show("Нет данных для записи!",
		 "Внимание");
		return;
		}
		DataSet currentds = (DataSet)dataGrid1.DataSource;
		currentds.WriteXml(saveFileDialog1.FileName, writeMode);
	}
}

Создаем обработчик пункта "Сохранить схему":

private void mnusSchema_Click(object sender, System.EventArgs e)
{
	if(saveFileDialog1.ShowDialog() == DialogResult.OK)
	{
		dsTour.WriteXmlSchema(saveFileDialog1.FileName);
	}
	if (dataGrid1.DataSource == null)
	{
		MessageBox.Show("Нет данных для записи!",
		 "Внимание");
		return;
	}
}

Наконец, в конструкторе формы привязываем обработчиков пунктов меню группы "Сохранить" к обработчику пункта "DiffGram":

public Form1()
{
	InitializeComponent();
	//Открытие
	this.mnuDiffGram.Click += new EventHandler(mnuAuto_Click);
	this.mnuFragment.Click += new EventHandler(mnuAuto_Click);
	this.mnuIgnoreSchema.Click += new EventHandler(mnuAuto_Click);
	this.mnuInferSchema.Click += new EventHandler(mnuAuto_Click);
	this.mnuReadSchema.Click += new EventHandler(mnuAuto_Click);
	//Сохранение
	this.mnusIgnoreSchema.Click += new EventHandler(mnusDiffGram_Click);
	this.mnusWriteSchema.Click += new EventHandler(mnusDiffGram_Click);
}

Запускаем приложение. При выборе пункта меню "Write Schema" (метод WriteXml ) записываются данные и схема содержимого DataSet (рис. 11.33, А), при выборе пункта "Сохранить схему" (метод WriteXmlSchema ) - только схема (рис. 11.33, Б).

 Приложение "TypedDataSetReadandWriteXML". А - сохранение данных и схемы содержимого DataSet, Б - сохранение только схемы

увеличить изображение
Рис. 11.33. Приложение "TypedDataSetReadandWriteXML". А - сохранение данных и схемы содержимого DataSet, Б - сохранение только схемы

В программном обеспечении к курсу вы найдете приложение TypedData SetReadandWriteXML (Code\Glava5\TypedDataSetReadandWriteXML).

Запись содержимого и структуры обычного объекта DataSet

Запись содержимого обычного, нетипизированного, объекта DataSet практически ничем не отличается от рассмотренной выше. Скопируйте папку приложения "UntypedDataSetReadXML" и назовите ее "UntypedDataSetReadandWriteXML". Открываем проект и добавляем те же пункты меню, что и для типизированного DataSet. Перетаскиваем на форму элемент управления SaveFileDialog, в свойстве Filter вводим следующее значение:

XML and XSD Files(*.xml, *.xsd)| *.xml; *.xsd; |All Files(*.*)|*.*

Далее создаем обработчиков пунктов меню "DiffGram", "Сохранить схему", а также вносим изменения в конструктор формы - код в точности такой же, как и в приложении TypedDataSetReadandWriteXML. Запускаем приложение. Открывая простейший документ XMLEasy.xml, можно затем сохранить его и схему (рис. 11.34).

 Приложение "UntypedDataSetReadandWriteXML". А - сохранение XML - документа, Б - сохранение схемы

увеличить изображение
Рис. 11.34. Приложение "UntypedDataSetReadandWriteXML". А - сохранение XML - документа, Б - сохранение схемы

В программном обеспечении к курсу вы найдете приложение UntypedData SetReadandWriteXML (Code\Glava5\UntypedDataSetReadandWriteXML).

Александра Тимофеева
Александра Тимофеева
Украина, Киев
Bakke Aleksander
Bakke Aleksander
Россия, Mуниципальный округ N 4