如何获取GetChanges()方法返回的DataRow中的列值的列名?

时间:2013-12-20 13:26:20

标签: c# datagridview

我有一个基于四列的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值获取列名的代码吗?

1 个答案:

答案 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);
}
// ...