在RowValidated事件内部将行添加到DataGridView时出错

时间:2018-08-16 06:32:14

标签: c# datagridview

我想在验证行后向datagridview添加新行。我在RowValidated事件内部调用我的AddNewRow方法。但这会显示“无法在此事件处理程序中执行操作”错误。

我的datagridview没有任何数据源的限制,并且AllowUsersToAddRow属性设置为false。

DataGridView只有一列,名为“成本”。

这是我的代码;

 private void RMaterialDGV_RowValidating(object sender, DataGridViewCellCancelEventArgs e)
    {
        DataGridView dgv = sender as DataGridView;
        if (dgv.IsCurrentRowDirty)
        {
            if(dgv.CurrentRow.Cells["Cost"].Value == null || dgv.CurrentRow.Cells["Cost"].Value.ToString().Length == 0
                || dgv.CurrentRow.Cells["Cost"].Value.ToString() == 0.ToString())
            {
                e.Cancel = true;
            }
        }
    }

    private void RMaterialDGV_RowValidated(object sender, DataGridViewCellEventArgs e)
    {
        DataGridView dgv = sender as DataGridView;
        if (dgv.CurrentRow.Index == dgv.Rows.Count - 1 && dgv.CurrentRow.Cells["Cost"].Value != null)
        {
            if (dgv.CurrentRow.Cells["Cost"].Value.ToString().Length > 0)
                AddNewRowToDGV();
        }
    }

    private void AddNewRowToDGV()
    {
        int index = RMaterialDGV.Rows.Add();
        RMaterialDGV.Rows[index].Cells["Cost"].Value = 0;
    }

我使用此方法在其他项目之前添加新行,但从未收到这些错误。

我想念什么?

谢谢。

2 个答案:

答案 0 :(得分:0)

当控件绑定数据时,不能以编程方式将行添加到DataGridView的行集合中。

相反,您可以将行添加到数据源。将您的AddNewRowToDGV方法更新为如下所示。

import pandas as pd
df = pd.DataFrame({'read': ["Red", "is", "my", "favorite", "color"]})
print(df)
    read
0   Red
1   is
2   my
3   favorite
4   color

答案 1 :(得分:0)

我解决了创建数据表并将此数据表绑定到我的DataGridView的问题。但是我真的不明白是什么导致真正的问题。