2016-11-12 42 views
0

在使用下面的命令的DataGridView事件「RowsAdded」不顯示正確的rowIndex爲NEWROW

dataGridView1.Rows.Add(); 

我得到了一個新的行創建一個DataGridView新行,但e.RowIndex仍顯示新創建的行之前的索引。

private void button1_Click(Object sender, EventArgs e) 
{ 
     dataGridView1.Rows.Add(); 
} 

private void dataGridView1_RowsAdded(Object sender, DataGridViewRowsAddedEventArgs e) 
{ 
     MessageBox.Show(e.RowCount + ";" + e.RowIndex); 
} 

所以,如果我有2行我normaly有rowIndex位置0和1 但隨着編程添加一個新行「新增()」當事件RowsAdded表明的rowIndex仍然是1,而不是2,這是新建的Row。

+0

不應該dataGridView1 .Rows.Add()帶一個參數? – Fang

+0

這是可選的。如果你想立即填寫數據到列中,那麼有一些類似於.add(「1」,「2」,「3」)等等的東西是有道理的。 但是即使這樣,它也不起作用。 – Maik

+0

我無法重現該問題,因此我猜測問題在datagridview設置中的其他位置。 – Slai

回答

0

這可能會有所幫助,或使之更令人困惑。該行的最後一個新行前插入:

dataGridView1.RowsAdded += (o, e) => Debug.Print(e.RowIndex + "\t" + dataGridView1.RowCount 
             + "\t" + dataGridView1.Rows[e.RowIndex].IsNewRow); 
dataGridView1.Columns.Add("", ""); // 0 1 True 
dataGridView1.Rows.Add();   // 0 2 False 
dataGridView1.Rows.Add();   // 1 3 False 
dataGridView1.Rows.Add();   // 2 4 False 

但如果用戶添加行,然後將新行的最後一排,用戶剛進入後增加:

1 2 True 
2 3 True 
3 4 True 
+0

我看到Slai,但對我而言仍然不正確。 RowIndex始終在RowCount後面1。因此,「IsNew」將總是拋出False。 對我來說這不是一個正確的行爲。爲什麼在手動輸入和編程方式上有所不同?最後,有人試圖歸檔的結果是一樣的。 – Maik

+0

我認爲這是因爲最後一行不是真正的「行」,而更像是用戶輸入新行的空行模板。此外,無論[[.AllowUserToAddRows]](https://msdn.microsoft.com/zh-cn/library/system.windows.forms.datagridview.allowusertoaddrows)設置爲True還是False,此行爲都可以保持一致。 – Slai

+0

但最後添加了一個新的行。這個新的行觸發了一個所謂的private void dataGridView1_RowsAdded(Object sender,DataGridViewRowsAddedEventArgs e)MessageBox.Show(e.RowCount +「;」+ e.RowIndex); } 當我使用我的.add()時,基本上也是如此。所以我期望在這種情況下,同樣的結果會被打印出來,因爲我們有相同的結果;一個新的行。從用例來看,它是絕對平等的。但我們有不同的行爲。 – Maik

相關問題