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

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

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

Datagridviewのセル編集確定方法

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

■96492 / inTopicNo.1)  Datagridviewのセル編集確定方法
  
□投稿者/ harupapa (1回)-(2020/12/02(Wed) 11:34:52)

分類:[.NET 全般] 

データベースに編集されている行のみ更新時間を記録し、更新するコードを書いています。
DataRowState.Modifiedになっている行のみ更新時間を取得しようとしているのですが、
セルが確定されていない状態ではDataRowState.Modifiedになりません。
選択されている状態のままのセルの編集を確定させるにはどうすればいいでしょうか

DataGridView.EndEdit() ではDataRowState.Modifiedになりませんでした。
引用返信 編集キー/
■96493 / inTopicNo.2)  Re[1]: Datagridviewのセル編集確定方法
□投稿者/ WebSurfer (2170回)-(2020/12/02(Wed) 12:18:57)
No96492 (harupapa さん) に返信

全体的な構成がどうなっているか、何をしているのかが分かりませんし、質問の意味も分かりません。

以下の記事の図1と図2を見てください。(URL にカッコが含まれているとリンクがうまく貼れないか
もしれませんが、その場合は URL の文字列をコピペしてください)

DB 設計者のための明解 ADO.NET 第 1 回
https://docs.microsoft.com/ja-jp/previous-versions/cc482903(v=msdn.10)

アプリの構成は図2のようになっていて、その図の DataSet の左側に UI として DataGridView とか
TextBox があると想像してます。

そうであれば、ユーザーが UI を操作して表示されている値を変更すると、図1にある通り、当該
DataRow の RowState が DataRowState.Modified に変わるはずです。

EndEdit の前でも後でも同じはずです。

ただし、Update をかけると Unchanged になります。それを見ているとかはないですか?
引用返信 編集キー/
■96494 / inTopicNo.3)  Re[2]: Datagridviewのセル編集確定方法
□投稿者/ harupapa (2回)-(2020/12/02(Wed) 12:58:08)
No96493 (WebSurfer さん) に返信

> そうであれば、ユーザーが UI を操作して表示されている値を変更すると、図1にある通り、当該
> DataRow の RowState が DataRowState.Modified に変わるはずです。
>
> EndEdit の前でも後でも同じはずです。


値を変更し、別の行へ移動すればDataRowState.Modifiedに変更されますが、
値を変更してもそのセルにいたままの状態ではDataRowState.Modifiedになりません。
テキストボックスも、チェックボックスも同様です。
引用返信 編集キー/
■96499 / inTopicNo.4)  Re[3]: Datagridviewのセル編集確定方法
□投稿者/ WebSurfer (2171回)-(2020/12/02(Wed) 14:33:57)
No96494 (harupapa さん) に返信

> 値を変更してもそのセルにいたままの状態ではDataRowState.Modifiedになりません。

確かにそのようですね。

Visual Studio のデータソース構成ウィザード(以下の記事参照)を使って作った定番のアプリで
確認できました。

チュートリアル : データベースへのデータの保存 (単一テーブル)
https://docs.microsoft.com/ja-jp/previous-versions/0f92s97z(v=vs.120)

自動生成される更新のコードは以下の通りですが(コメントとその下の一行を除く)、質問者さん
のコードで this.Validate(); が追加できるのであれば、それを追加してみてはいかがですか?

private void productsBindingNavigatorSaveItem_Click(object sender, EventArgs e)
{
    // DataRow の RowSate をチェックするため追加
    DataTable dt = this.northwindDataSet.Products;

    this.Validate();
    this.productsBindingSource.EndEdit();
    this.tableAdapterManager.UpdateAll(this.northwindDataSet);
}


変更したセルから移動しないで更新をかけると(ボタンクリックで上のイベントハンドラへ制御を飛
ばすと)、コメントの直下の dt の当該 DataRow の RowState は DataRowState.Unchanged ですが、
this.Validate(); の後は Modified に変わるので、UpdateAll で編集結果が DB に反映できるという
仕組みになっているようです。

引用返信 編集キー/
■96500 / inTopicNo.5)  Re[3]: Datagridviewのセル編集確定方法
□投稿者/ Hongliang (1130回)-(2020/12/02(Wed) 14:46:10)
行の変更を確定するにはこんな感じでしょうか。
DataGridView1.BindingContext[DataGridView1.DataSource].EndCurrentEdit();

ただし、行の編集中に勝手に確定されると、セルを1つ2つ入力後にESCでその行の編集をキャンセルという操作ができなくなるので、使いどころは少し考える必要があります。
引用返信 編集キー/
■96501 / inTopicNo.6)  Re[4]: Datagridviewのセル編集確定方法
□投稿者/ harupapa (3回)-(2020/12/02(Wed) 15:29:00)
No96499 (WebSurfer さん) に返信
これでできました。
ありがとうございました。
解決済み
引用返信 編集キー/

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


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

このトピックに書きこむ