2012-11-12 182 views
1

我有一些空的datagridview使用的数据源是通过BindingSource List。因为AllowUserToAddRows = true,所以最初datagridview有一个空行。当我只选择这一行并关闭表单时,datagridview会创建一个新的空对象。它为什么这样做?如何防止这一点? 谢谢。删除dataGridView的最后一个空行

选择空行: enter image description here 我得到这个: enter image description here

结论:多次试图找到一个解决方案后,我决定创建的DataGridView和两个按钮的用户界面控制(添加行和删除行)。此时我停止了按计划去做,但我仍然很高兴知道解决方案。

+0

>>>使用数据源是List通过BindingSource。你可以发布这是如何完成的? – NeverHopeless

+0

>>>当我只选择这一行并关闭表单时,datagridview会创建一个新的空对象。每次重新打开创建一个新的行?说第一次打开显示2行,然后第二次显示三行等。? – NeverHopeless

+1

如果我在关闭窗体中选择了“newRow”,则每次重新打开都会创建一个新行。即,带有星号的行。 –

回答

7

您可以处理RowValidating事件以验证行是否为空。如果是这样,那么取消事件和行将不会被添加。

if (gridView[0, e.RowIndex].Value == null) 
    e.Cancel = true; 
+0

我试图处理这个事件,但它暂停表单并且不允许任何内容,除了关闭表单。 –

2

我建议,以确保你不会增加RowCount属性的值在事件处理程序像RowLeaveCellLeave

例如:

DataGridView1.RowCount += 1; 
+0

不,我不会以编程方式增加rowCount。 –

+0

什么是用'EditMode'属性映射的?您可以讨论您为datagridview处理的任何事件吗? – NeverHopeless

+0

EditMode是“EditOnKeystrokeOrF2”。请参阅我的编辑。 –

-2

设置属性您的DataGridView.AllowUsertoAddRows为False。

或您的Form_Load函数中添加它,例如:

dataGridView1.AllowUserToAddRows = FALSE;

+0

很清楚他*希望*使用“AllowUserToAddRows”,但是它会导致这个错误。清除它显然可以解决功能问题,但会创建另一个功能问题。 – BradleyDotNET

0

尝试在FormClosing事件处理程序中显式清除DataSource。

private void Form1_FormClosing(object sender, FormClosingEventArgs e) 
{ 
    dataGridView1.DataSource = null; 
} 

保留在内存绑定中可能会导致此问题。

0

是的,DataGridView底部总会有一个空行。它允许用户在运行时添加新数据;他们所要做的就是开始在新行中输入。

要禁用它,您还需要防止用户添加新行。通过将DataGridView控件的AllowUserToAddRows属性设置为False来执行此操作:

myDataGridView.AllowUserToAddRows = false;