2009-08-16 59 views
1

我想獲取DataGridView的當前行的索引。問題是,如果當前行是新行,則CurrentRow被設置爲不是新行的最後一行。我無法檢查要選擇的行,因爲如果選擇了一行並不意味着它是當前行,並且不一定選擇當前行。DataGridView CurrentRow排除新行

我可以得到新行的索引,但是如何知道新行是否是當前行?

+0

嗨, 在某種程度上我明白你的意思,但我不明白爲什麼你必須使用currentRow你怎麼whant做蒙山呢? 最好的問候, Iordan – IordanTanev 2009-08-16 12:19:20

+0

我想用當用戶單擊按鈕時填充當前行的單元格。如果該行碰巧是新行,則應該創建該行,並且應該用該值填充單元格。 – Ruud 2009-08-16 12:46:07

回答

3

我通過下面的代碼鉤入CellClick事件:

private void uiEntries_CellClick(object sender, DataGridViewCellEventArgs e) 
{ 
    Console.WriteLine(e.RowIndex == uiEntries.NewRowIndex); 
} 

當該條件爲真,則用戶 '選擇' 新行。根據這些信息,您可能需要實際插入一條新記錄(使用..Rows.Add()方法),然後才能真正對其執行任何操作,因爲新行實際上並不存在於集合中;它只是作爲一個佔位符來表示一個新行。

+0

我認爲這會奏效。我會盡快嘗試。 – Ruud 2009-09-12 16:20:00

+0

解決方案存在一個缺陷:當用戶不是通過單擊而是通過使用鍵盤來更改當前單元格時,這不起作用。 CurrentCellChanged事件將工作,但這不會發送一個單元格。 – Ruud 2009-09-15 16:40:10

+0

然後,您可能還需要捕獲擊鍵,並查看是否應對「移動」做出迴應。例如,如果它是最後一行旁邊的「向下箭頭」,則表示用戶正試圖添加一行(可能是?)。然後,您可以執行與上面相同的步驟(插入新記錄等)。 – 2009-09-15 17:14:50

0

這個屬性值可以解決你的問題嗎?

dataGridView1.CurrentCell.RowIndex

+0

不,同樣的問題,我已經試過了。 – Ruud 2009-08-16 16:19:18

0

我使用CellEnter事件將CurrentCell.RowIndex保存到表單變量中。單擊另一個按鈕會導致此事件觸發最後一個現有行索引,而不是我們需要的新行索引,因此測試焦點以忽略該情況。

這樣就避免了必須檢查所有可能的鍵和鼠標操作,這些操作可能會將光標移動到新行,就像您使用CellClick事件一樣。

從VB

代碼自動轉換:

private int ActualCurrentRowIndex; 

private void DataGridView1_CellEnter(object sender, System.Windows.Forms.DataGridViewCellEventArgs e) 
{ 
    if (DataGridView1.Focused) { 
     ActualCurrentRowIndex = DataGridView1.CurrentCell.RowIndex; 
    } 
}