【问题标题】:Dynamically adding row to datatable adds two rows向数据表动态添加行添加两行
【发布时间】:2016-08-07 03:49:09
【问题描述】:

我有一个绑定到 DataTable 'ExcludedMachines' 的 DataGridView 'DGV_MachinesExclusion'。在 DataGridView 中手动添加新行时,我使用 DataGridView 的 CellValueChanged 事件来触发下面的代码。

        private void DGV_MachinesExclusion_CellValueChanged(object sender, DataGridViewCellEventArgs e)
    {
        DataRow dr = ExcludedMachines.NewRow();
        dr = ((DataRowView)DGV_MachinesExclusion.Rows[0].DataBoundItem).Row;
        ExcludedMachines.Rows.Add();
        UpdateExlusionList();
    }

结果是它增加了两行。一行空白,一行手动添加数据。 'UpdateExclusionList()' 方法只是将 DataTable 写入 XML 文件。 我过去曾使用这种方式成功地动态添加行。谁能解释为什么这段代码添加了两行?

谢谢,托马斯

【问题讨论】:

    标签: c# data-binding datagridview datatable


    【解决方案1】:

    线

     ExcludedMachines.Rows.Add();
    

    将添加一个空白行,因为您没有在“添加”函数中指定要添加到行中的内容 - 您应该添加

    ExcludedMachines.Rows.Add(dr);
    

    而不是填充该行。

    当您触发事件时,它是否会更改触发它的单元格值(即,当您希望它只运行一次时,它是否会多次触发该事件)?您是否仔细检查了“UpdateExclusionList()”方法,它肯定不包含任何意外添加的行创建代码(可能是从测试中遗留下来的?)?

    希望这会有所帮助。

    【讨论】:

    • 您是正确的,它添加了一个空白行,因为该行未填充。我已经改变了它,但它只是添加了两个填充的行。 'UpdateExclusionList()' 方法肯定不会添加行,因为我在没有此方法上方代码的情况下测试了事件。 DataTable 没有发生任何事情。
    • 另外,当我中断事件时,它只会停止一次。所以我认为该事件不会被触发两次。当我离开代码行:'ExcludedMachines.Rows.Add()' 时,数据表中不会添加任何内容...
    • 这表明问题出在 DataRow 行上。您是否尝试过:DataRow dr = ((DataRowView)DGV_MachinesExclusion.Rows[0].DataBoundItem).Row,然后将其直接添加到表格中?
    • 其实我有,结果一样。但是在检查您的第一个建议时,使用“dr”填充 Rows.Add 方法时,我得到了一个 ArgumentException。它说“这一行已经属于这个表。”
    • 建议在创建新行时发生一些奇怪的事情。如果您注释掉 ExcludedMachines.Rows.Add(); 行,它是否会将该行添加到表中,其中包含正确的数据以及剩余的行?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-10
    • 1970-01-01
    相关资源
    最近更新 更多