none
DataGridViewの値が変更されたセルのスタイル(背景色、前景色)を変える RRS feed

  • 質問

  • 開発環境はVB.NET 2008 Professional Editionで、Windows Formsアプリケーションを開発しています。
    OSはWindows10 Professional(64bit版)です。

    DataGridViewの値が変更されたセルを目立たせるためスタイル(背景色、前景色)を変えたいのですが、
    CellFormattingイベントで値が変更されたセルを検知する簡単な方法があればご教示ください。

    DataGridViewのDataSourceへはDataTableをセットしています、他のプロパティは下記としています。
     ・キーとなる列は値の変更不可
     ・キー以外の列は変更可能
     ・行や列の増減、移動は不可
     ・ソートは可能

    現在はセットしたDataTableをCopyしたものを保持し、DataGridViewの行のキーとなる列
    (もしくは単純連番の列を付与して使用)の値で検索して列の値を取得し比較する方法を考えていますが、
    もっとシンプルな方法が無いか検討中です。

    どうぞよろしくお願い致します。
    2018年12月17日 8:18

回答

すべての返信

  • 以下のような感じでしょうか?

    DataGridViewのセルの値によってセルスタイルを変更する
    https://dobon.net/vb/dotnet/datagridview/cellformatting.html


    ★良い回答には質問者は回答済みマークを、閲覧者は投票を!

    2018年12月17日 8:27
    モデレータ
  • trapemiya様、早速の返信どうもありがとうございます。

    リンク先のサンプルコードの『セルの値により、背景色を変更する』の条件を固定値との比較ではなく
    セル編集前の値(正確にはDataSourceへDataTableをセットした際のセルの値になります)との比較判定を
    シンプルに行えないか検討中です。
    (質問内容が不明瞭で申し訳ありません)

    やはり、DataSourceへDataTableをセットした際の値を別で保持し、CellFormattingイベント内で
    セル毎に現在のセルの値と保持しているDataTableからセルに対応する行と列の値を取得して比較して
    セルのスタイルを変更するしかないでしょうか。

    もしくは、DataGridViewの行と列に対応したBoolean型二次元配列を用意し、CellValidatingで値変更を検知したら
    用意していた二次元配列の要素をTrueへ変え、
    CellFormattingイベント内でセルに対応する二次元配列の要素がTrueの場合はセルのスタイルを変更する方法も
    考え付きました。
    2018年12月17日 8:45
  • DataRowVersionのOriginalと比較すれば良いのではないでしょうか?

    行の状態とバージョン
    https://docs.microsoft.com/ja-jp/dotnet/framework/data/adonet/dataset-datatable-dataview/row-states-and-row-versions


    ★良い回答には質問者は回答済みマークを、閲覧者は投票を!

    • 回答としてマーク matsuda11 2018年12月20日 2:05
    2018年12月17日 8:51
    モデレータ
  • trapemiya様、さらにご提案頂きどうもありがとうございます。
    DataRowVersion.Originalを使えばAcceptChangesを呼び出すまで元の値を取得できますね、どうもありがとうございます!


    PS.返信が遅くなり申し訳ありませんでした。


    2018年12月20日 2:04