Типизированный объект DataSet. Чтение и запись XML-документов
Запись содержимого и структуры типизированного объекта DataSet
Содержимое объекта DataSet может быть записано в виде XML-файла. Это очень удобно для последующей передачи данных или межплатформенного взаимодействия. Для записи используется метод WriteXml, который, подобно методу ReadXml, может записывать данные в файл, в объект подкласса XmlWriter, в объект подкласса TextWriter или в поток (рис. 11.30).
Необязательный параметр XmlWriteMode позволяет дополнительно уточнять записываемые данные. Его значения приводятся в таблице 11.9.
| Значение | Описание |
|---|---|
| IgnoreSchema | В XML-документ записываются только данные объекта DataSet. Если данные не загружены, документ не создается. Это значение по умолчанию |
| WriteSchema | В XML-файл записываются данные объекта DataSet с добавлением схемы в качестве встроенного XSD-документа |
| DiffGram | В XML-документ сохраняются первоначальные и текущие значения данных |
Для записи схемы DataSet применяется метод WriteXmlSchema, который записывает данные в те же объекты, что и методы WriteXml или ReadXml (рис. 11.31):
Скопируйте папку приложения TypedDataSetReadXML и назовите ее "TypedDataSetReadandWriteXML". Добавляем в главное меню следующие пункты (рис. 11.32):
| Name | Text |
|---|---|
| mnuSave | &Сохранить |
| mnusDiffGram | Diff&Gram |
| mnusIgnoreSchema | Ig&nore Schema |
| mnusWriteSchema | &Write Schema |
| mnusSchema | Cохранить схе&му |
Из окна 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, Б).
увеличить изображение
Рис. 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).
увеличить изображение
Рис. 11.34. Приложение "UntypedDataSetReadandWriteXML". А - сохранение XML - документа, Б - сохранение схемы
В программном обеспечении к курсу вы найдете приложение UntypedData SetReadandWriteXML (Code\Glava5\UntypedDataSetReadandWriteXML).




