C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[4]: RowsAdded が二度呼ばれてしまう


(過去ログ 115 を表示中)

[トピック内 7 記事 (1 - 7 表示)]  << 0 >>

■67877 / inTopicNo.1)  RowsAdded が二度呼ばれてしまう
  
□投稿者/ 初心者 (5回)-(2013/09/07(Sat) 19:00:45)

分類:[C#] 

private void dgv_RowsAdded(object sender, DataGridViewRowsAddedEventArgs e)
{
DataGridViewRow row = dgv.Rows[e.RowIndex];
if (row.IsNewRow)
return;
Debug.WriteLine("RowIndex=" + e.RowIndex + " RowCount=" + e.RowCount);
}

5行のDataTableをバインドしたところ出力結果が以下のようになってしまいます。

RowIndex=0 RowCount=1
RowIndex=1 RowCount=4
RowIndex=0 RowCount=1 ← 余分
RowIndex=1 RowCount=4 ← 余分
引用返信 編集キー/
■67880 / inTopicNo.2)  Re[1]: RowsAdded が二度呼ばれてしまう
□投稿者/ Jitta (72回)-(2013/09/08(Sun) 10:03:38)
Jitta さんの Web サイト
No67877 (初心者 さん) に返信
> private void dgv_RowsAdded(object sender, DataGridViewRowsAddedEventArgs e)
> {
> DataGridViewRow row = dgv.Rows[e.RowIndex];
> if (row.IsNewRow)
> return;
> Debug.WriteLine("RowIndex=" + e.RowIndex + " RowCount=" + e.RowCount);
> }
>
> 5行のDataTableをバインドしたところ出力結果が以下のようになってしまいます。
>
> RowIndex=0 RowCount=1
> RowIndex=1 RowCount=4
> RowIndex=0 RowCount=1 ← 余分
> RowIndex=1 RowCount=4 ← 余分

そのようにコーディングしているから。


 なぜ、RowAdded イベントが通知されるのでしょうか。
RowAdded イベントを通知するように依頼し、
追加を行ったからです。

 では、その原因は、どのようにコーディングしているのでしょうか。

 ここに載せてある結果からは、複数のオブジェクトで発生しているようです。
また、RowCount が連続していないことも気になります。
いったい、どんなコードを書いて、この結果を得たのでしょうか。



この“質問文”は、私の理解では、「質問」ではなく、「なぞなぞ」です。
ウェブでは、あなたの状況を知ることはできません。
状況説明をきちんとできるようになってください。←仕事で「報告」するときに求められます。
引用返信 編集キー/
■67885 / inTopicNo.3)  Re[2]: RowsAdded が二度呼ばれてしまう
□投稿者/ 初心者 (6回)-(2013/09/08(Sun) 17:18:27)
>  では、その原因は、どのようにコーディングしているのでしょうか。
private void Form1_Load(object sender, EventArgs e)
{
dt = new DataTable();
dt.Columns.Add("NO", typeof(int));
for (int i = 0; i < 5; i++)
dt.Rows.Add(i);
dgv.DataSource = dt;
}
のようにして5行のDataTableをバインドしてるだけです。

> また、RowCount が連続していないことも気になります。
RowIndex=0 RowCount=1
RowIndex=1 RowCount=4
のように分割されてしまうのは.NETの仕様だと思ったのですが違うのでしょうか?
引用返信 編集キー/
■67888 / inTopicNo.4)  Re[2]: RowsAdded が二度呼ばれてしまう
□投稿者/ 初心者 (7回)-(2013/09/08(Sun) 17:47:01)
> ウェブでは、あなたの状況を知ることはできません。
> 状況説明をきちんとできるようになってください。←仕事で「報告」するときに求められます。
実際のソースはもっと複雑なのですが、
現象を再現させるための最小限のソースにしてあります。
dgvのプロパティは殆ど変更していませんし、
RowsAddedイベントもVSのプロパティマネジャーで追加したものです。
呼び出し履歴を見ると
1度目はDataGridView.OnBindingContextChanged
2度目はDataGridView.OnDataSourceChanged
を通過しています。
引用返信 編集キー/
■67912 / inTopicNo.5)  Re[3]: RowsAdded が二度呼ばれてしまう
□投稿者/ Jitta (75回)-(2013/09/09(Mon) 21:20:24)
Jitta さんの Web サイト
No67888 (初心者 さん) に返信

5行のテーブルなのに、RowCount が4なのは、なぜ?
5行のテーブルなのに、RowIndex が0と1なのは、なぜ?
おそらく、IsNewRow ではじかれているのだと思いますが、だったらなぜすべての行がはじかれない?

というような疑問は、持たなかったのでしょうか。

DataTable.Rows に、NewRow メソッドがあったと思います。行の生成をこちらでやってみてください。

Dim r = dt.Rows.NewRow
r の各列に値を設定する
dt.Rows.Add(r)
引用返信 編集キー/
■67913 / inTopicNo.6)  Re[4]: RowsAdded が二度呼ばれてしまう
□投稿者/ 初心者 (10回)-(2013/09/09(Mon) 23:28:53)
> 5行のテーブルなのに、RowCount が4なのは、なぜ?
> 5行のテーブルなのに、RowIndex が0と1なのは、なぜ?
ちなみに10行のテーブルにした場合は
RowIndex=0 RowCount=1
RowIndex=1 RowCount=9
となるので、そのような仕様なんだなと理解しております。

> おそらく、IsNewRow ではじかれているのだと思いますが、だったらなぜすべての行がはじかれない?
データソースの変更によって追加された行とIsNewRowは別です。
IsNewRowはAllowUserToAddRows=trueの場合にDataGridViewによって自動的に追加される最後の行です。
IsNewRowをはじかなかった場合は
RowIndex=0 RowCount=1
RowIndex=0 RowCount=1
RowIndex=1 RowCount=4
という結果になります。

> DataTable.Rows に、NewRow メソッドがあったと思います。行の生成をこちらでやってみてください。
DataTable.NewRowとDataGridViewRow.IsNewRowは関連性がありません。

引用返信 編集キー/
■67914 / inTopicNo.7)  Re[4]: RowsAdded が二度呼ばれてしまう
□投稿者/ 初心者 (11回)-(2013/09/10(Tue) 00:18:09)
> 5行のテーブルなのに、RowCount が4なのは、なぜ?
> 5行のテーブルなのに、RowIndex が0と1なのは、なぜ?
おそらく1行目だけ別に処理されるのは型のチェックなどを行ってるからではないかと思います。
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -