2012-11-12 242 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;