急急急!!!C#高手进

来源:百度知道 编辑:UC知道 时间:2024/06/08 23:55:48
DataSet ds = new DataSet();
1// ds.ReadXml("M_Rate.xml");

2//ds = SqlHelper("select * from users");
dataGridView1.DataSource = ds.Tables[0];
DataTable dt = ((DataTable)dataGridView1.DataSource).GetChanges();

如果用第一句绑定数据,那么最后的dt得到的是改变的和没变的所有行
而如果是第二句绑定数据,dt得到的是改变的行.

为什么???????????????//
要多少分都行
SqlHelper("select * from users");是从数据库中选数据

我主要想知道GetChange的作用为什么不同.

getchange()获取已经修改了的数据.就是rowstate不为unchange的数据.
我这么说吧,你的m_rate.xml中不包括数据行的状态,注意,不是架构!是rowstate.所以你读到ds中的时候,数据都是unchang的.

你的第二个绑定,就是用sqlhelp的绑定的.读出来rowstate也是unchange的.
如果你没修改的话,就算是getchange()也是全部的数据.若修改了, 自然是change后的了.

其实,关键的问题是,xml中不包含rowstate[你自己保存的时候,也可以保存进去]
所以读出来的数据是全部的.

ds.ReadXml("M_Rate.xml");这只读取到数据而没有读取的架构
你换下面的这样试试
ds.ReadXml("M_Rate.xml",XmlReadMode.ReadSchema);
GetChange的作用注释说的很清楚了!是上次加载以来或者是调用AcceptChanges以来所以更改的数据!
要不你就在得到数据后调用一下AcceptChanges这个方法我想得到的数据就一样了

你确认XML文件的项目名和users表里面的项目名是一样的吗?

不管原数据怎么样,最后是用的dataGridView1.DataSource来得到修改的数据,不应该有什么不同。
所以,我觉得问题是不是出在dataGridView绑定的数据表的项目,而项目的名字和原数据的项目名字又不一样。

...去搜下