一、datatable自己构建以及构造数据,先创建列,然后创建行,并写入数据
DataTable dt = new DataTable();
dt.Columns.Add("UserId");
dt.Columns.Add("UserName");
for (int i = 0; i < 10; i++) {
var row = dt.NewRow();
string uname="UserName";
row["UserId"] = i.ToString();
row[uname] = "test" + i;
dt.Rows.Add(row);
}
二、dt.RejectChanges(); dt.AcceptChanges(); dt.GetChanges(); 三个函数的含义及相关用法
DataTable 中的每个DataRow中都有DataRowState记录每行状态。此状态在DataTable中已经封装好。以下为DataRowState 不中状态值
// 摘要:
// 该行已被创建,但不属于任何 System.Data.DataRowCollection。System.Data.DataRow 在以下情况下立即处于此状态:创建之后添加到集合中之前;或从集合中移除之后。
Detached = 1,
//
// 摘要:
// 该行自上次调用 System.Data.DataRow.AcceptChanges() 以来尚未更改。
Unchanged = 2,
//
// 摘要:
// 该行已添加到 System.Data.DataRowCollection 中,System.Data.DataRow.AcceptChanges()
// 尚未调用。
Added = 4,
//
// 摘要:
// 该行已通过 System.Data.DataRow 的 System.Data.DataRow.Delete() 方法被删除。
Deleted = 8,
//
// 摘要:
// 该行已被修改,System.Data.DataRow.AcceptChanges() 尚未调用。
Modified = 16,
dt.RejectChanges() 此函数表示 “回滚”,主要用在处理异常中。修改DataRowState为运行前的状态
dt.AcceptChanges() 此函数表示“更新状态”, 例如:插入一条数据,获取最新数据,将当前状态改为默认初始状态
dt.GetChanges() 此函数表示“发生改变的数据”,此函数将返回发生改变的数据,如果没有任何改变,则返回null;
注意:
当在使用GetChanges()时,文本发生改变时,不能获取改变值。
原因:当前编辑文本没有失去焦点,不能立即获取更新的数据。
解决办法:
gvRight.CloseEditor();
gvRight.UpdateCurrentRow();
var data = m_DataSource.GetChanges();
gvRight.ShowEditor();