](.Net)DataGridViewでカスタムクラスをバインドした状態でソートを行う。](.Net)DataGridViewで列、高さ自動設定の注意。](.Net)DataGridViewで列の順番指定しているのに指定どおりにならない。>>>(.Net)DataGridViewで右クリックしたときに行選択したいDataGridViewでコンテキストメニューを割り当てた時、右クリックをしても、クリックしたセルに対してイベント走るのではなく、その時に選択されているセルに対してイベントが走ってしまいます。Excelみたいに、右クリックしたら、マウスポインタの位置の行が選択されて、その後コンテキストメニューが出るようにしたい場合、以下のようにMouseDownイベントで行選択してしまえばいいようです。参考先そのままですがコードを載せておきます。.Net開発(.Net)DataGridViewでリセットする方法DataGridViewにDataTableをバインドし、ユーザがリセットボタンを押したタイミングで、初期値に戻すための方法です。メンバでそれらしいを探してみたんですが、見当たりません。仕方なく下記のような方法をとることとしました。//tblには既にインスタンスが生成されてることとします。バックアップを作成し、リセットボタンを押下したら、バックアップを戻すというような方法です。きれいな方法ではありませんが、とりあえずできました。セルの値によって背景変更する処理をしていました。Trueなら背景色を付け、Falseならスタイルを無しする下記のような感じです。SystemColors.WindowText;}で、それから下記のように列(Column1)の背景色を設定しようとしたができませんでした。Color.Honeydew;どうやら、スタイルの設定には優先順位があるようです。優先順位については、dobon:DataGridViewにセルスタイルを設定するで書かれていました。先にセルスタイルが優先されるので、この場合後から列スタイルを設定しても意味が無かったようです。指定しているのも問題でした。この場合、CellStyleにnullを指定してやればいいようです。(下記コード参照)//スタイルをnullにするとスタイル解除となる。セル値を変更してまだDBに保存する前の状態の場合にセルの背景色を変え、保存したら元の背景色に戻すという動作を実現したいと考えてます。イベントでセルの背景色を変更しますが、問題がソートしたときです。今回はカスタムクラスをソートするという特異な要件で、ソートするとデータは並び変わってもセルスタイルはソートされないんですよね。(カスタムクラスのソートは(.Net)DataGridViewでカスタムクラスをバインドした状態でソートを行う参照)CellValidatingでの背景色変更はこんな感じです。Color.Red;}セルの値に基づいてするときは、DataGridView.CellFormattingイベントが使えるのですが、今回はセルの内容ではないのでできません。(CellFormattingについては、(.Net)バインドされたDataGridViewでソートするとセルの色が元に戻る参照。DataTableをバインドした場合は、ソートすると背景色消えるんですよね。任意の行をTrueにし、ソート後にループで回してスタイルを変更するというかなり面倒な手法を使うことにしました。スムーズな方法はないものですかね。.Net開発(.Net)DataGridViewRow作成時に列名指定で値を入れる最近、DataGridViewRow.CreateCells()というメソッドを知りました。列定義に基づいてセル(正確にはセルテンプレート)を作成してくれるもので、新規DataGridViewの行を作るときに便利そうです。それで、下記のようなコードを書いてみました。基づくセルテンプレート作成後、セルに値を入れグリッドにバインドするような流れです。"a";dgvInputPayList.Rows.Add(row);上記のようにすると下記のような例外となりました。ハンドルされませんでした。いう列は見つかりません。ParamName="columnName"ただ、列名ではなく列のインデックスを指定すると可能なようです。行を追加した後だとできるようです。"a";しかし、上記だと2行目からがNGになります。ハンドルされませんでした。Message="指定された引数は、有効な値の範囲内にありません。ParamName="rowIndex"どうやら、行のインデックスがまずいらしいです。結局行を追加した後に、DataGridViewの行に対して、値を指定するようにしました。バインドしてるんですが、ユーザーが行を選択した時に選択された行に対応するオブジェクト取得する方法です。そのためのプロパティが用意されていました。それは、DataGridViewRow.DataBoundItemプロパティです。行にバインドされたオブジェクトにアクセスするが参考になります。しといたほうが安全ですね。セルだけ選択した場合は取得できないようなので。.Net開発(.Net)DataGridViewへのカスタムクラスのバインド(.Net)DataGridViewでバインドしたデータソースを変更してもグリッドには反映されない?でカスタムクラスのバインドについて書きました。下記のようにプログラム側から1行削除しようとしました。Form{//カスタムクラスのList。バインド元になるデータ。