2016-11-12 13 views
0

の正しいrowIndexには、次のコマンドDataGridViewのイベントは、NewRow

dataGridView1.Rows.Add(); 

を使用してDataGridViewに新しい行を作成する時には、私はショーまだ新しい行を得たが、e.RowIndex表示されません「RowsAdded」新しい作成された行の前のインデックス

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); 
} 

だから、場合、私はnormaly rowIndexに0と1 持っているだろうが、「().add」をプログラム的に新しい行を追加するときにイベントRowsAddedがrowIndexにはまだ1の代わりであることを示している2行を持っています2、新しい作成された行です。

+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/en-us/library/system.windows.forms.datagridview.allowusertoaddrows)がTrueまたはFalseに設定されているかどうかに一貫性があります。 – Slai

+0

しかし最後に新しい行が追加されました。この新しい行は、プライベートvoid dataGridView1_RowsAdded(オブジェクト送信者、DataGridViewRowsAddedEventArgs e){ と呼ばれるイベントをトリガーします。MessageBox.Show(e.RowCount + ";" + "e.RowIndex); } 私の.add()を使うと、基本的に同じことが起こります。だから私は、この場合同じ結果が出るので、同じものが印刷されることを期待しています。新しい行。 Usecaseからは絶対的に等しい。しかし、我々は異なる行動をとる。 – Maik

関連する問題