2009-02-27 4 views
1

Пожалуйста, помогите мне экспортировать DataGrid в XML. Я пробовал два пути, но оба они вызывают исключения.Экспорт Datagrid в xml

DataTable dt = (DataTable)dataGrid2.DataSource; 
dt.WriteXml("t.xml", XmlWriteMode.IgnoreSchema); 

Это бросает InvalidOperationException с сообщением «Не могу сериализовать объект DataTable. DataTable имя не установлено.»

Пожалуйста, порекомендуйте подходящий метод для экспорта datagrid в XML.

+0

Добавлено повторное обновление комментарий –

ответ

1

Here's a link к примеру того, что предлагает Марк.

Прокрутите вниз до образцов SerializeToXML и DeserializeFromXML.

0

Учитывая эту ошибку; просто укажите имя DataTable?

dt.TableName = "Fred"; 
... 

Лично я хотел бы использовать объект-сериализации (возможно XmlSerializer над List<T>), но DataTable должно быть прекрасно ...


Update; для примера с использованием DataTable.WriteXml/ReadXml; обратите внимание на комментарий «ЭТО ЛИНИЯ» для этого необходимо: уметь писать и b: правильно читать строки.

using System; 
using System.Data; 
static class Program 
{ 
    static void Main() 
    { 
     DataTable table = CreateEmptyTable(); 
     table.Rows.Add(1, "abc"); 
     table.Rows.Add(2, "def"); 
     WriteTable(table); 
     table.WriteXml("t.xml", XmlWriteMode.IgnoreSchema); 

     DataTable clone = CreateEmptyTable();   
     clone.ReadXml("t.xml"); 
     WriteTable(clone); 
    } 
    static DataTable CreateEmptyTable() 
    { 
     DataTable table = new DataTable(); 
     table.Columns.Add("Foo", typeof(int)); 
     table.Columns.Add("Bar", typeof(string)); 
     table.TableName = "MyTable"; // THIS LINE MAKES IT ALL WORK 
     return table; 
    } 
    static void WriteTable(DataTable table) { 
     foreach (DataColumn col in table.Columns) 
     { 
      Console.Write(col.ColumnName); 
      Console.Write('\t'); 
     } 
     Console.WriteLine(); 
     foreach (DataRow row in table.Rows) 
     { 
      foreach (DataColumn col in table.Columns) 
      { 
       Console.Write(row[col]); 
       Console.Write('\t'); 
      } 
      Console.WriteLine(); 
     } 
    } 
} 
+0

это не работает снова ту же ошибку как сериализовать может у подробно объяснить, – Arunachalam

0

Этот ответ специфичен для winforms на C#, но должен применяться в целом к ​​программированию ASP.NET. Ниже, _dtResults является глобальным DataTable. Где-то раньше, когда вы связываете источник datagrid (dg) с DataTable, просто сделайте копию в глобальной переменной _dtResults. Затем позвоните ExportXMLFromDG().

// user clicks on button, which binds the dg to the datatable, 
    // prompts the user to save the XML, serializes it and saves the file. 
    private void toolStripButton4_Click(object sender, EventArgs e) 
    { 
     dg.DataSource = dtResults; // this actually happens earlier. 
     _dtResults = dtResults; // this actually happens earlier. 

     if (dg.Columns.Count > 0) 
     { 
      SaveFileDialog saveFileDialog1 = new SaveFileDialog(); 

      saveFileDialog1.Filter = "xml files (*.xml)|*.xml|All files (*.*)|*.*"; 
      saveFileDialog1.FilterIndex = 1; 
      saveFileDialog1.RestoreDirectory = true; 

      if (saveFileDialog1.ShowDialog() == DialogResult.OK) 
      { 
       ExportXMLFromDG(saveFileDialog1.FileName); 
      } 
     } 
    } 


    private void ExportXMLFromDG(string xml_file) 
    { 
     XmlSerializer serializer = new XmlSerializer(typeof(DataTable)); 
     TextWriter textWriter = new StreamWriter(xml_file); 
     serializer.Serialize(textWriter, _dtResults); 
     textWriter.Close(); 

    } 
Смежные вопросы