1

我正在尝试编写如下函数:

private void Func1(DataColumnChangeEventArgs e)
{
    ds.TableName.AddRow(
        e.Row[e.Column.ColumnName, DataRowVersion.Original].ToString(),
    e.Row[e.Column.ColumnName, DataRowVersion.Proposed].ToString());
}

我称它为:

private void Func2()
{
    DataColumnChangeEventArgs e = new DataColumnChangeEventArgs(
        dataTable.Rows[index],
        dataTable.Columns["ColName"],
        newValue);

    e.ProposedValue = newValue;
    Func1(e);
}

但是,e.Row[e.Column.ColumnName, DataRowVersion.Proposed].ToString()正在抛出一个VersionNotFoundException. 有什么办法可以做到这一点?

4

3 回答 3

0

DataColumnChangedEventArgs 旨在与 DataTable 之类的类一起使用。DataTable 在调用关联事件(如 ColumnChanged)时创建一个实例。创建 one 的实例实际上不会创建对数据行的更改。

于 2012-09-27T07:34:58.197 回答
0

e.ProposedValue = newValue 是多余的,您已经在构造函数中给出了 newValue。您可以通过 e.ProposedValue 访问该值。因此,通过这个系统,您一次只能对行进行一次更改,并且您必须记住它是哪一列。

于 2012-09-27T07:51:04.913 回答
0

我会说,你的方法应该是这样的:

ds.TableName.AddRow(e.Row[e.Column.ColumnName].ToString(), e.ProposedValue.ToString());

由于 args 行中的那一行没有版本,但是有新旧值...

于 2012-09-27T08:27:47.340 回答