2009-02-27 7 views
1

Aidez-moi à exporter un DataGrid en XML. J'ai essayé deux façons, mais toutes deux provoquent des exceptions.Exporter Datagrid vers un xml

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

Cela jette un InvalidOperationException avec le message "Impossible de sérialiser DataTable. Nom DataTable n'est pas réglé."

Veuillez recommander une méthode appropriée pour exporter une grille de données vers XML.

+0

Ajouté à jour re commentaire –

Répondre

1

Here's a link à un exemple de ce que suggère Marc.

Faites défiler les méthodes SerializeToXML et DeserializeFromXML de l'échantillon.

0

Étant donné cette erreur; suffit de définir le nom du DataTable?

dt.TableName = "Fred"; 
... 

Personnellement, j'utiliser-sérialisation d'objets (peut-être XmlSerializer sur List<T>), mais DataTable devrait aller ...


mise à jour; pour un exemple utilisant DataTable.WriteXml/ReadXml; notez le commentaire "CETTE LIGNE FAIT TOUT ÇA MARCHE"; c'est nécessaire a: pouvoir écrire, et b: lire correctement les lignes.

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

cela ne fonctionne pas à nouveau la même erreur comment sérialiser u peut expliquer en détail – Arunachalam

0

Cette réponse est spécifique aux winforms en C# mais devrait généralement s'appliquer à la programmation ASP.NET. Ci-dessous, _dtResults est un DataTable global. Quelque part plus tôt, lorsque vous liez la source dataagrid (dg) à DataTable, faites simplement une copie dans la variable globale _dtResults. Ensuite, appelez 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(); 

    } 
Questions connexes