Украина, Киев |
Типизированный объект 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).