2016-11-12 49 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