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

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

ログ内検索
  • キーワードを複数指定する場合は 半角スペース で区切ってください。
  • 検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
  • [返信]をクリックすると返信ページへ移動します。
キーワード/ 検索条件 /
検索範囲/ 強調表示/ ON (自動リンクOFF)
結果表示件数/ 記事No検索/ ON
大文字と小文字を区別する

No.98871 の関連記事表示

<< 0 >>
■98871  DataGridViewの新規行をコードで更新した時の確定
□投稿者/ nohirahiroki -(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>
親記事 /過去ログ172より / 関連記事表示
削除チェック/

■98872  Re[1]: DataGridViewの新規行をコードで更新した時の確定
□投稿者/ WebSurfer -(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)
記事No.98871 のレス /過去ログ172より / 関連記事表示
削除チェック/

■98877  Re[1]: DataGridViewの新規行をコードで更新した時の確定
□投稿者/ 大谷刑部 -(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>

    グリットの入力値としては確定してるがデータソースの値としては確定してない状態かと思います。
記事No.98871 のレス /過去ログ172より / 関連記事表示
削除チェック/

■98876  Re[2]: DataGridViewの新規行をコードで更新した時の確定
□投稿者/ ぼーちゃん -(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();
記事No.98871 のレス /過去ログ172より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -