2014-10-10 85 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