2016-09-26 124 views
0

我有一個包含7列的datagridview。這個datagridview沒有連接到它的數據集。用戶使用dataGridView.Rows.Add命令輸入值...如何使用無數據集的Linq將DataGridView保存爲XML

有可能將這些文件保存爲XML(Linq)?

+0

有可能是這樣做的幾種方法。有沒有什麼具體的原因,你爲什麼不使用數據集?我的意思是你將如何連接到數據庫?您可以使用其他技術,例如EF,但這取決於您真正想實現的目標。你能提供一些更詳細的信息嗎? – Lance

+0

沒有連接到數據庫的只是一個帶有列的網格。我沒有得到它和一個適當的組件來執行此任務。 –

+0

你使用的是WPF還是winforms?在WPF中,您始終可以將數據網格綁定到可觀察集合,然後對其進行序列化。 http://stackoverflow.com/questions/8633398/xmlserialize-an-observablecollection – Lance

回答

1

我創建

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Windows.Forms; 

namespace WindowsFormsApplication1 
{ 
    public partial class Form1 : Form 
    { 
     const string FILENAME = @"c:\temp\test.xml"; 
     public Form1() 
     { 
      InitializeComponent(); 

      DataTable dt = new DataTable(); 
      dt.Columns.Add("Name", typeof(string)); 
      dt.Columns.Add("Age", typeof(int)); 

      dt.Rows.Add(new object[] { "John", 25 }); 
      dt.Rows.Add(new object[] { "Mary", 26 }); 
      dt.Rows.Add(new object[] { "Bill", 27 }); 
      dt.Rows.Add(new object[] { "Beth", 28 }); 

      dataGridView1.DataSource = dt; 

      //reverse 
      DataTable dt2 = new DataTable("NewTable"); 
      foreach (DataGridViewColumn column in dataGridView1.Columns) 
      { 
       dt2.Columns.Add(column.Name, column.ValueType); 
      } 
      //don't save last row of dattagridview which is the blank editable row 
      for (int i = 0; i < dataGridView1.Rows.Count - 1; i++) 
      { 
       DataGridViewRow row = dataGridView1.Rows[i]; 
       DataRow newRow = dt2.Rows.Add(); 
       for (int j = 0; j < row.Cells.Count; j++) 
       { 
        newRow[j] = row.Cells[j].Value; 
       } 
      } 

      dt2.WriteXml(FILENAME, XmlWriteMode.WriteSchema); 
     } 
    } 
} 

從數據表一個DataGridView。然後反轉並從DGV創建數據表並保存到文件中。

+0

謝謝你,幫助很多 –

0

另一種解決方案:

void SaveData() { 
     XDocument xmlDocument = new XDocument(new XElement("Grid")); 

     foreach(DataGridViewRow row in dataGridView1.Rows) 
     xmlDocument.Root.Add(
      new XElement("Grid", 
       new XAttribute("xxx1", row.Cells[0].Value.ToString()), 
       new XAttribute("xxx2", row.Cells[1].Value.ToString()), 
       new XAttribute("xxx3", row.Cells[2].Value.ToString()), 
       new XAttribute("xxx4", row.Cells[3].Value.ToString()), 
       new XAttribute("xxx5", row.Cells[4].Value.ToString()), 
       new XAttribute("xxx6", row.Cells[5].Value.ToString()), 
       new XAttribute("xxx7", row.Cells[6].Value.ToString()))); 
     xmlDocument.Save("@Path"); 
    } 

    void LoadData() { 
     try { 
      XDocument xmlDocument = XDocument.Load("@Path"); 

      foreach(XElement el in xmlDocument.Root.Elements()) { 
       switch(el.Name.LocalName) { 
        case "Grid": 
         dataGridView1.Rows.Add(el.Attribute("xxx1").Value,el.Attribute("xxx2").Value, 
          el.Attribute("xxx3").Value,el.Attribute("xxx4").Value,el.Attribute("xxx5").Value, 
          el.Attribute("xxx6").Value,el.Attribute("xxx7").Value); 
         break; 
       } 
      } 
     } catch(Exception ex) { 
      MessageBox.Show(ex.ToString()); 
     } 
    } 
相關問題