【问题标题】:Add a DataRow to a DataTable without the ColumnChanged event firing在不触发 ColumnChanged 事件的情况下将 DataRow 添加到 DataTable
【发布时间】:2015-09-16 15:10:24
【问题描述】:

有没有办法在不触发DataTableColumnChanged 事件的情况下将现有的DataRow 添加到DataTable?我有一个连接到 ColumnChanged 事件的事件处理程序,我想继续为表中的所有现有行运行,但我不希望它为新行触发,直到该行被添加到表(我不希望它在添加行时触发)。

我试过了:

table.ImportRow(rowToAdd); // causes the ColumnChanged event to fire

DataRow newRow = table.NewRow();
foreach (DataColumn col in table.Columns)
    newRow[col.ColumnName] = rowToAdd[col.ColumnName]; // causes the ColumnChanged event to fire
table.Rows.Add(newRow);

我已经找到了一种解决方法,我存储当前正在添加的行并在事件处理程序中检查该值,但是如果有一种方法可以在不触发事件的情况下添加行,那将是最好的。

【问题讨论】:

    标签: c# winforms events datatable datarow


    【解决方案1】:

    您可以改用table.Rows.Add(params Object[] values);。例如

    Object[] values = new Object[table.Columns.Count];
    for (int i = 0; i < values.Length; i++)
       values[i] = rowToAdd[table.Columns[i].ColumnName]; // not sure if order is consistent
    table.Rows.Add(values);
    

    【讨论】:

    • 谢谢,这正是我想要的。不幸的是,在尝试了这个之后,我发现有人已经将一个初始化方法连接到 RowChanged 事件,只要将一行添加到表中就会计算多个字段(导致 ColumnChanged 事件触发)......所以在看起来我无论如何都会被困在我的工作中。不过,你的答案是我原来问题的正确答案,所以我会这样标记。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-30
    • 2011-02-02
    • 2017-01-30
    • 2012-05-03
    • 2011-06-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多