我有一个基于四列的datagridview,比如名字A,B,C,D。现在,如果我连续进行更改,我可以使用以下代码捕获这些更改:
DataTable DgvChangedDT = estDataSet.mat_comp_dtl_v.GetChanges();
try
{
foreach (DataRow dr in DgvChangedDT.Rows)
{
Status = dr.RowState.ToString();
if (Status == "Modified")
{
foreach (DataColumn dc in DgvChangedDT.Columns)
{
OrgVal = dr[dc, DataRowVersion.Original].ToString();
CurrVal = dr[dc, DataRowVersion.Current].ToString();
MessageBox.Show("Original Value: " + OrgVal + " ," + " Current Value: " + CurrVal);
}
}
}
}
catch (Exception ex)
{
MessageBox.Show("Exception: " + ex);
}
}
上面的代码工作正常,并按照它们在DataSet中出现的顺序给出DataSet中列的原始值和当前值。但我的问题是我希望在每次迭代中获取列值的名称,我想用它来构建我的更新语句以发送到DataBase。这是必需的,因为DataSet包含视图而不是表,因此Visual Studio(2010)不会为DataSet隐式创建Update方法。
有人可以建议在第二个foreach循环中为每个dc值获取列名的代码吗?
答案 0 :(得分:0)
GetChanges
会返回包含所有已更改行的DataTable
。您正在循环此表的所有列,因此您已经全部DataColumns
。这有一个你可能正在寻找的ColumnName
property。
// ...
foreach (DataColumn dc in DgvChangedDT.Columns)
{
string nameOfColumn = dc.ColumnName; // <----
OrgVal = dr[dc, DataRowVersion.Original].ToString();
CurrVal = dr[dc, DataRowVersion.Current].ToString();
MessageBox.Show("Original Value: " + OrgVal + " ," + " Current Value: " + CurrVal);
}
// ...