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

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

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

DataGridViewの新規行をコードで更新した時の確定

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

■98871 / inTopicNo.1)  DataGridViewの新規行をコードで更新した時の確定
  
□投稿者/ nohirahiroki (1回)-(2022/01/09(Sun) 18:29:13)

分類:[C#] 

2022/01/09(Sun) 18:29:40 編集(投稿者)
2022/01/09(Sun) 18:29:35 編集(投稿者)

<pre><pre>.net Framework 4.7.2 でC#でDataGridViewのコードでの編集を試しています。

下記のようにDataTableにバインドした後に、DataGridViewの新規行のセルのValueを直接更新しています。


DataTable DT = new DataTable("DT");
DT.Columns.Add("Col1");
DT.Columns.Add("Col2");
DT.Rows.Add("A","B");
this.dataGridTest.DataSource = DT;
this.dataGridTest.Rows[1].Cells[0].Value = "C";


このコードを実行後は、2行目(新規行)の1列目にはCと表示されます。
しかし、この新規行の別のセル(Col2 = 2列目)をクリックすると、1列目のCの表示は元に戻って空白になってしまいます。
コード上でこの更新(this.dataGridTest.Rows[1].Cells[0].Value = "C";)での更新を確定し、次の新規行が表示される状態にしたいのですが、EndEdit等を試してもうまくいきませんでした。

そもそも、"C"を設定した直後の状態がどういう状態と言えるのか良く分からず、そもそもどうすべきか教えていただけませんでしょうか。</pre></pre>
引用返信 編集キー/
■98872 / inTopicNo.2)  Re[1]: DataGridViewの新規行をコードで更新した時の確定
□投稿者/ WebSurfer (2403回)-(2022/01/10(Mon) 07:37:56)
No98871 (nohirahiroki さん) に返信

> C#でDataGridViewのコードでの編集を試しています。
> 下記のようにDataTableにバインドした後に、
> DataGridViewの新規行のセルのValueを直接更新しています。

C# のコードで操作するなら普通は DataTable の方だと思いますが。

全体的にどういうことがしたいのかのシナリオを書けませんか?

一般的には、

DataGridView ⇔ BindingSource ⇔ DataTable ⇔ データソース (SQL Server 等)

というような構成で、DataGridView はユーザーが操作して編集し、
その結果がバインドされている DataTable に反映され、編集された
DataTable の内容をデータソースに書き戻すと言った使われ方になります。

なので、「DataGridViewの新規行のセルのValueを直接更新」ということは
普通はしないと思うのですが? (C# のコードでということなら相手は BindingSource か DataTable)
引用返信 編集キー/
■98876 / inTopicNo.3)  Re[2]: DataGridViewの新規行をコードで更新した時の確定
□投稿者/ ぼーちゃん (32回)-(2022/01/11(Tue) 10:06:46)
バインド後はDataTableにデータを追加するようにしてください。

DT = new DataTable("DT");
DT.Columns.Add("Col1");
DT.Columns.Add("Col2");
DT.Rows.Add("A", "B");
this.dataGridTest.DataSource = DT;

DataRow dr = DT.NewRow();
dr["Col1"] = "C";
DT.Rows.Add(dr);
DT.AcceptChanges();

引用返信 編集キー/
■98877 / inTopicNo.4)  Re[1]: DataGridViewの新規行をコードで更新した時の確定
□投稿者/ 大谷刑部 (161回)-(2022/01/11(Tue) 10:12:05)
No98871 (nohirahiroki さん) に返信
> 2022/01/09(Sun) 18:29:40 編集(投稿者)
> 2022/01/09(Sun) 18:29:35 編集(投稿者)
>
> <pre><pre>.net Framework 4.7.2 でC#でDataGridViewのコードでの編集を試しています。
>
> 下記のようにDataTableにバインドした後に、DataGridViewの新規行のセルのValueを直接更新しています。

バインド後とは具体的にどのイベント発生時ですか?
字面だけから判断するとDataBindingCompleteイベントでロジックを記載していると取れますが、実際はどのイベントで記載してますか?
それによって、イベントの発生順序により状態が異なることがあり得ます。
まずそこを明確にしてください。


> DataTable DT = new DataTable("DT");
> DT.Columns.Add("Col1");
> DT.Columns.Add("Col2");
> DT.Rows.Add("A","B");
> this.dataGridTest.DataSource = DT;
> this.dataGridTest.Rows[1].Cells[0].Value = "C";
>
>
> このコードを実行後は、2行目(新規行)の1列目にはCと表示されます。
> しかし、この新規行の別のセル(Col2 = 2列目)をクリックすると、1列目のCの表示は元に戻って空白になってしまいます。
> コード上でこの更新(this.dataGridTest.Rows[1].Cells[0].Value = "C";)での更新を確定し、次の新規行が表示される状態にしたいのですが、EndEdit等を試してもうまくいきませんでした。

他のカラムのnot null制約等によりますが、データバインドしてるということは、該当行から離れて、かつ該当行のすべての列にデータエラーがない状態でなければ、データの確定は出来ない仕様かと思います。
そして、同行内で列を移っただけで、入力済の列がクリアされるには、いずれかのイベントの処理等でクリアされていることが考えられるので、やはりこれもどのイベントでどのような処理をしてるかを明確にしていただく必要があります。

> そもそも、"C"を設定した直後の状態がどういう状態と言えるのか良く分からず、そもそもどうすべきか教えていただけませんでしょうか。</pre></pre>

グリットの入力値としては確定してるがデータソースの値としては確定してない状態かと思います。

引用返信 編集キー/

このトピックをツリーで一括表示


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

このトピックに書きこむ