C# と VB.NET の質問掲示板
ASP.NET、C++/CLI、Java 何でもどうぞ
C# と VB.NET の入門サイト
DataGridViewのセルインデックス順?について
掲示板トップ
C# と VB.NET 入門
新規作成
利用方法/規約
ツリー表示
トピック表示
ランキング
記事検索
過去ログ
[トピック内 3 記事 (1 - 3 表示)] <<
0
>>
■102451
/ inTopicNo.1)
DataGridViewのセルインデックス順?について
▼
■
□投稿者/ モモ
(1回)-(2023/10/04(Wed) 10:07:42)
分類:[C#]
DataGridView1.Rows[i].Cells
で取得できるセルインデックス(列)の順は何で決定されるのでしょうか。
DataGridViewに新列を追加するとデザイナで指定した順番とCellsコレクションのインデックスが一致しておらずセルに対する処理部分で弊害が出ています。
デザイナで指定した順番でenumを定義しており、各所で使用しています。
ちなみによくあるColumnIndexではColumnsコレクションは変更されてもCellsは変更されませんでした。
デザイナーファイル
xxxxx.designer.cs
を見ましたが、各項目は順番通りに定義されています。
Cellsコレクション(順序)を変更する?にはどこを修正すればいいか教えていただけると幸いです。
何卒よろしくお願いいたします。
引用返信
編集キー/
編集
■102452
/ inTopicNo.2)
Re[1]: DataGridViewのセルインデックス順?について
▲
▼
■
□投稿者/ 魔界の仮面弁士
(3700回)-(2023/10/04(Wed) 11:37:35)
■
No102451
(モモ さん) に返信
> DataGridView1.Rows[i].Cells
dataGridView1.Rows[y].Cells[x] や
dataGridView1[x, y] によるアクセスは、極力使用しないでください。
行番号に依存したソースは、ソート時の影響を受けてしまいますし、
共有行が解除されてしまうといったパフォーマンス面の問題もあります。
基本的には .DataSource に割り当てたオブジェクトを読み書きするようにし、
DataGridView の個々の Rows への直接アクセスは控えるようにします。
たとえば DataSet/DataTable をデータバインドしている場合は、
DataRow row = ((DataRowView)dataGridView1.CurrentRow?.DataBoundItem).Row;
のようにして、バインド元の行にアクセスすることもできます。
セルのフォントや色を変えたいような場合も、セル単位で個別に割り当てるのではなく、
「列単位」「奇数行単位」などの大きな単位で割り当てるようにします。
https://dobon.net/vb/dotnet/datagridview/cellstyle.html
もっとも非バインド列に対しては、セル値を直接参照するしかないですけれどね。
データ依存でスタイルを変えたい場合は、CellFormatting イベントにて
e.CellStyle のみを操作するのが良いでしょう。
https://dobon.net/vb/dotnet/datagridview/cellformatting.html
> DataGridViewに新列を追加するとデザイナで指定した順番とCellsコレクションのインデックスが一致しておらずセルに対する処理部分で弊害が出ています。
DataGridView の AutoGenerateColumns が、既定値の true になっていると思いますが、
これにより、DataSouce に指定したオブジェクトの内容に応じて、列が増減することになります。
https://learn.microsoft.com/ja-jp/dotnet/api/system.windows.forms.datagridview.autogeneratecolumns
自動生成に任せるか、false にして手動割り当てするかは任意ですが、
列番号が安定しない場合は、列名でアクセスするというのも一つの選択肢かともいます。
各列の Name を明示することで、実行時に
dataGridView1.Rows[y].Cells["列名"]
dataGridView1["列名", y]
によるアクセスが可能です。これなら、AllowUserToOrderColumns の影響を受けにくいというメリットもあります。
列オブジェクトのインスタンスをそのまま使って、
dataGridView1[列.ColumnIndex, y]
のようにアクセスすることもできますね。
引用返信
編集キー/
編集
■102453
/ inTopicNo.3)
Re[2]: DataGridViewのセルインデックス順?について
▲
▼
■
□投稿者/ モモ
(3回)-(2023/10/04(Wed) 13:14:46)
■
No102452
(魔界の仮面弁士 さん) に返信
なるほど承知いたしました。
よく分かる解説でとても助かりました。
本当にありがとうございました。
解決済み
引用返信
編集キー/
編集
このトピックをツリーで一括表示
トピック内ページ移動 / <<
0
>>
このトピックに書きこむ
入力内容にタグは利用できません。
他人を中傷する記事は管理者の判断で予告無く削除されます。
半角カナは使用しないでください。文字化けの原因になります。
名前、コメントは必須記入項目です。記入漏れはエラーになります。
入力内容の一部は、次回投稿時の手間を省くためブラウザに記録されます。
URL は自動的にリンクされます。
記事中に No*** のように書くとその記事にリンクされます(No は半角英字/*** は半角数字)。
名前
(*必須)
E-Mail (任意)
Web サイト (任意)
投稿モード
通常モード
図表モード (ソースコードを貼る場合はこちらを使用)
本文
(質問の場合は、開発環境・使用言語のバージョンなどを最初に書いてください)
■No102452 (魔界の仮面弁士 さん) に返信 > ■No102451 (モモ さん) に返信 >>DataGridView1.Rows[i].Cells > > dataGridView1.Rows[y].Cells[x] や > dataGridView1[x, y] によるアクセスは、極力使用しないでください。 > > 行番号に依存したソースは、ソート時の影響を受けてしまいますし、 > 共有行が解除されてしまうといったパフォーマンス面の問題もあります。 > > 基本的には .DataSource に割り当てたオブジェクトを読み書きするようにし、 > DataGridView の個々の Rows への直接アクセスは控えるようにします。 > > たとえば DataSet/DataTable をデータバインドしている場合は、 > DataRow row = ((DataRowView)dataGridView1.CurrentRow?.DataBoundItem).Row; > のようにして、バインド元の行にアクセスすることもできます。 > > セルのフォントや色を変えたいような場合も、セル単位で個別に割り当てるのではなく、 > 「列単位」「奇数行単位」などの大きな単位で割り当てるようにします。 > https://dobon.net/vb/dotnet/datagridview/cellstyle.html > > もっとも非バインド列に対しては、セル値を直接参照するしかないですけれどね。 > > > データ依存でスタイルを変えたい場合は、CellFormatting イベントにて > e.CellStyle のみを操作するのが良いでしょう。 > https://dobon.net/vb/dotnet/datagridview/cellformatting.html > > >>DataGridViewに新列を追加するとデザイナで指定した順番とCellsコレクションのインデックスが一致しておらずセルに対する処理部分で弊害が出ています。 > DataGridView の AutoGenerateColumns が、既定値の true になっていると思いますが、 > これにより、DataSouce に指定したオブジェクトの内容に応じて、列が増減することになります。 > https://learn.microsoft.com/ja-jp/dotnet/api/system.windows.forms.datagridview.autogeneratecolumns > > 自動生成に任せるか、false にして手動割り当てするかは任意ですが、 > 列番号が安定しない場合は、列名でアクセスするというのも一つの選択肢かともいます。 > 各列の Name を明示することで、実行時に > dataGridView1.Rows[y].Cells["列名"] > dataGridView1["列名", y] > によるアクセスが可能です。これなら、AllowUserToOrderColumns の影響を受けにくいというメリットもあります。 > > 列オブジェクトのインスタンスをそのまま使って、 > dataGridView1[列.ColumnIndex, y] > のようにアクセスすることもできますね。
編集キー
自分の投稿を編集する時に必要です
(半角8文字以内)
解決済み
/
解決したらチェックしておきましょう。
プレビュー/
管理者用
-
Child Tree
-