2014-10-10 49 views
0

我有一個應用程序,其中我從一個datagridView的數據保存到3 xml文件的應用程序已保存並加載buttions按保存時它保存到xml文件的問題是它不會加載在datagridview中所做的更改...只爲它加載標題保存datagridview數據並從xml文件中恢復#

DATAGRIDVIEW COLUMNS:(列1 =文本,列2 =複選框,列3 =下拉w)注意:下拉列表中有兩個值...所以它obvoiusly 0和1

代碼保存:

public void Save(DataGridView dgv) 
     { 


      DataTable dt = new DataTable(); 
      for (int i = 1; i < dgv.Columns.Count + 1; i++) 
      { 
       DataColumn column = new DataColumn(dgv.Columns[i - 1].HeaderText); 
       dt.Columns.Add(column); 

      } 
      int ColumnCount = dgv.Columns.Count; 
      foreach (DataGridViewRow dr in dgv.Rows) 
      { 
       DataRow dataRow = dt.NewRow(); 
       for (int i = 0; i < ColumnCount; i++) 
       { 
        dataRow[i] = dr.Cells[i]; 
       } 
      } 

      DataSet ds = new DataSet(); 
      ds.Tables.Add(dt); 
      XmlTextWriter newXml = new XmlTextWriter(@"c:/older/DGVXML.xml", Encoding.UTF8); 
      ds.WriteXmlSchema(newXml); 
} 

到目前爲止,這是我的所有的負載

public void Load(DataGridView dgv) 
     { 
      XmlReader xmlFile = XmlReader.Create(@"c:/older/DGVXML.xml", new XmlReaderSettings()); 
      DataSet dataSet = new DataSet(); 
      dataSet.ReadXml(xmlFile,XmlReadMode.ReadSchema); 
      //LOADS!!! YAY, but only the headers with no data... check save? 
      dgv.DataSource = dataSet.Tables[0]; 
      xmlFile.Close(); 
     } 
+0

'Dictionary'具有'Keys'集合。對於每個鍵,您必須在「DataGridView」中創建一行,然後填充行「Cells」。問題是什麼? – Sinatr 2014-10-10 09:14:41

+0

我不知道如何把這個... – 2014-10-10 09:17:51

+1

屬性並不意味着存儲這些類型的數據。相反,將數據保存在xml文件中並在需要時加載它 – Thangadurai 2014-10-10 09:54:43

回答

0

問題1

你必須調用dt.Rows.Add(dataRow)添加一行。

http://msdn.microsoft.com/en-us/library/5ycd1034.aspx

問題2

DataSet.WriteXmlSchema方法不輸出當前的數據,僅結構。

http://msdn.microsoft.com/en-us/library/kas5y1ky(v=vs.110).aspx

使用DataSet.WriteXml方法來代替。正在使用

http://msdn.microsoft.com/en-us/library/ws09ehyc(v=vs.110).aspx

代碼如下..(由提問者編輯)

DataTable dt = new DataTable(); 
      for (int i = 1; i < dgv.Columns.Count + 1; i++) 
      { 
       DataColumn column = new DataColumn(dgv.Columns[i - 1].HeaderText); 
       dt.Columns.Add(column); 
      } 
      int columnCount = dgv.Columns.Count; 
      foreach (DataGridViewRow dr in dgv.Rows) 
      { 
       DataRow dataRow = dt.NewRow(); 
       for (int i = 0; i < columnCount; i++) 
       { 
        //returns checkboxes and dropdowns as string with .value..... nearly got it 
        dataRow[i] = dr.Cells[i].Value; 
       } 
       dt.Rows.Add(dataRow); 
      } 

      DataSet ds = new DataSet(); 
      ds.Tables.Add(dt); 
      XmlTextWriter xmlSave = new XmlTextWriter(@"c:/older/DGVXML.xml", Encoding.UTF8); 

      ds.WriteXml(xmlSave); 
      xmlSave.Close(); 
     } 
+0

是我在保存xml文件時獲得的所有內容 – 2014-10-13 08:45:58

+0

您的意思是您嘗試調用'DataSet.WriteXml'並且不輸出當前數據? – Jumpei 2014-10-13 08:56:04

+0

是的....當我打開XML文件是我得到它... DATAGRIDVIEW列:(列1 =文本,列2 =複選框,列3 =下拉)所有這些列的值必須被保存 – 2014-10-13 09:03:18

0

你的第一個錯誤是選擇ListDictionary爲數據的持有人。二,以序列化數據爲string數組。

您可以有一個小型演示者類來保存您的數據(或使用Tuple)。

public class MyParameter 
{ 
    public string Name {get; set;} 
    public bool Enabled {get; set;} // notice type 
    public SomeType Direction {get; set;} // not sure in type 
} 

然後你就可以輕鬆地序列排列表或陣列

var list = dgv.Rows.Select(o => new MyParameter() 
{ 
    Name = o.Cells["name"], 
    Enabled = o.Cells["ENABLED"], 
    Direction = o.Cells["DIRECTION"] 
}).ToList(); 

和恢復數據看起來那樣簡單

foreach(var parameter in app.Properties.Settings.Default.DeviceSettings) 
{ 
    dvg.Rows.Add(parameter.Name, parameter.Enabled, parameter.Direction); 
} 

代碼可能無法編譯(從頭部),但應該給一個想法。

我忘了提及,我從來沒有用過Properties來存儲應用程序設置(僅僅因爲它們是廢話)。我依賴於這個事實,你能夠在其中存儲Dictionary,那麼我的實現應該也可以。

保存配置(配置是一組應用程序屬性)的很多更好的方法是使用,例如XmlSerializerxml格式(這是人性化的查看/編輯)保存數據。該方法仍然是相同的存儲設置列表:獲取它們作爲列表,序列化(或如果他們只是其他配置設置的一部分,分配給屬性和序列化整個配置)。

+0

DATAGRIDVIEW COLUMNS :(列1 =文本,列2 =複選框,列3 =下拉列表)注意:下拉列表有兩個值.....我會使用arraylist – 2014-10-10 09:54:57

+1

不要使用數組列表! – TaW 2014-10-10 11:34:11

+0

看着保存到XML文件的不同接近張貼它的代碼..檢查出來球員補充coments – 2014-10-10 12:07:30