2010-12-21 29 views
6

我有一個可編輯的無界datagridview。我正在以編程方式更改新行的值。以編程方式使新行變髒,並在DataGridView後面插入新行

正常情況下,當用戶在新行的任何字段中輸入時,它會變髒,並在其下面插入另一個新行。

但在我的情況下,當用戶進入新行的任何字段時,我會捕獲功能鍵並以編程方式更改單元格值。

myGrid.CurrentCell.Value =「xyz」;

而且它不會在其下面插入新行。

現在作爲一個解決方法,我在CellValueChanged事件處理程序上試過這個。

if (myGrid.NewRowIndex == e.RowIndex) 
    { 
    myGrid.Rows.Insert(e.RowIndex + 1, 1); 
    } 

但它會拋出錯誤說No row can be inserted after the uncommitted new row.

我怎麼能告訴myGrid我已經使當前行(這是一個新行)變髒,並且在它之後需要新行?

回答

6

在這裏,我得到了解決

myGrid.NotifyCurrentCellDirty(true); 
+0

我投了這個票,但隨着更多的測試,我發現我還需要像@Haider所建議的那樣NotifyCurrentCellDirty(False) – isedwards 2017-01-19 07:58:48

0

我想(雖然我不確定)你試圖在之後插入一行......這是不可能的。你的代碼更改爲這個

myGrid.Rows.Insert(e.RowIndex - 1, 1); 

應該之前插入一行新行,這應該工作。

+0

我不需要當前行上面的行。 我正在改變新行本身,並在其更改我需要另一個新行,因爲當前行更改後變髒。我有解決方案。我很快發佈。 – IsmailS 2010-12-21 11:03:00

0

這是真的真的晚了考慮這個問題的時間表,但接受的答案並沒有爲我工作。最終爲我解決問題的方法是首先在髒行上插入一行,然後編輯「乾淨」行。

if (e.RowIndex == myGrid.Rows.Count - 1) 
{ 
    myGrid.Rows.Add(); 
} 
myGrid[e.ColumnIndex, e.RowIndex].Value = etd.ResultText; // Edit at your leisure. 
+0

在調用'myGrid.NotifyCurrentCellDirty(true);'之前,您是否專注於相關單元? – IsmailS 2013-09-10 06:13:21

+0

是的,用戶必須在系統填滿之前雙擊單元格。它第一次運作良好,但重複插入的行爲不起作用。 – 2013-09-10 12:09:55

+0

我現在正在網絡開發中。所以無法驗證您的解決方案。 :(在我能打勾你的答案之前,等待有人加入。 – IsmailS 2013-09-11 10:20:40

7

我正在使用winforms DataGridView。就我而言,我試圖@iSid的解決方案,但在這裏是在一個輔助,我想這

myGrid.NotifyCurrentCellDirty(true); 
myGrid.NotifyCurrentCellDirty(false); 

通過僅使在不工作電流小區髒了,你必須提交該單元格也。在下一個命令我標記當前單元格不髒,這將​​強制datagridview添加髒行。它正在我的項目中工作。

相關問題