
お世話になります。ご協力お願いします。
環境:VS2008 .Net FrameWork3.5
言語:C#
質問内容:ボタンを押下したら、DataGridViewの列に設定したチェックボックスのON,OFFを判定して処理を行いたい。
現状以下の方法で実現は出来ていますが、とても回りくどい方法になっています。
正しい処理を教えて頂けないでしょうか。
1.DataGridViewにて、列にチェックボックスを設けている。
2.truevaluesプロパティにtrueをセットしている。
ボタンを押下したらチェックボックスのON、OFFを判定する為に、DataGridViewの行を
ループさせて判定させています。
for(int i=0;i < DataGridView.Count;i++){
___if((string)DataGridView.Rows[i].Columns[0].values == "true")
___{
______処理
___}
}
お願い致します。
No.1ベストアンサー
- 回答日時:
こんばんは。
正しいかどうかは断言出来ませんが、要はチェックボックスの「on, off」を確認しながらループするのが非効率的なので、ループ回数を「on」の個数だけに留めたいと言う事でしょうか。
でしたら、以下URLに記載されているイベントハンドラを応用して、
http://dobon.net/vb/dotnet/datagridview/datagrid …
セルのチェックボックスが「on, off」された瞬間に、セルのROW番号をハッシュテーブルに向かって「登録、解除」をしていけば、結果として「on」になっているセルのROW番号だけを保持する事になります。
「Dictionaryジェネリッククラス」
http://msdn.microsoft.com/ja-jp/library/xfhwa508 …
以下参考程度に。
//ハッシュテーブル(trueのROW番号だけを記録するDictionary<Key, Value>だが、今回の事例では両方とも同じROW番号を入れる)
private Dictionary<int, int> boolMapper;
private void Form1_Load(object sender, EventArgs e)
{
//作成
this.boolMapper = new Dictionary<int, int>();
}
private void dataGridView1_CurrentCellDirtyStateChanged(object sender, EventArgs e)
{
if (this.dataGridView1.CurrentCellAddress.X == 0 && this.dataGridView1.IsCurrentCellDirty)
{
this.dataGridView1.CommitEdit(DataGridViewDataErrorContexts.Commit);
}
}
//チェックボタンが「on, off」された瞬間に呼ばれるイベントハンドラ
private void dataGridView1_CellValueChanged(object sender, DataGridViewCellEventArgs e)
{
if (e.ColumnIndex == 0 && this.dataGridView1.Columns[e.ColumnIndex].ValueType == typeof(bool))
{
//チェックボタンが「on」になったのでハッシュテーブルに登録
if ((bool)this.dataGridView1[e.ColumnIndex, e.RowIndex].Value == true)
{
this.boolMapper.Add(e.RowIndex, e.RowIndex);
}
//チェックボタンが「off」になったのでハッシュテーブルから除外
else
{
this.boolMapper.Remove(e.RowIndex);
}
}
}
//ボタン1を押した時に呼ばれるイベントハンドラ
private void button1_Click(object sender, EventArgs e)
{
//ハッシュテーブルの要素個数分だけ回転する
foreach(KeyValuePair<int, int> kvp in this.boolMapper)
{
//ココで何かする「kvp.Value / kvp.Key」どちらにも同じ数字が入っているのでどちらを使用するかは問わない
this.dataGridView1[0, kvp.Value];
}
}
お返事が遅くない申し訳まりません。
チェック時にハッシュテーブルに入れて、foreachで判定する。
おぉー、こんな方法もありますね。
ありがとうございます。参考にさせて頂きます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
グリッドビューでのチェックボックス押下時イベント
Visual Basic(VBA)
-
C# DataGridView のヘッダーセル中央揃え
C言語・C++・C#
-
DataGridViewの、選択されている行を取り出したい
Visual Basic(VBA)
-
-
4
DataGrdViewに関連付けたデータの更新
C言語・C++・C#
-
5
【VB】タブ切り替え時のイベント
Visual Basic(VBA)
-
6
CloseとDisposeの違い
Visual Basic(VBA)
-
7
データグリッドビューの一番最初の行に列を追加したい
Visual Basic(VBA)
-
8
DataGridViewの各セル幅を自由に決め、その幅で固定したい
Visual Basic(VBA)
-
9
C# DataTableに最後に追加した行をDataGridView上で選択状態にする方法は?
C言語・C++・C#
-
10
DataGridViewの特定列に入力されている重複チェックをしたい
Visual Basic(VBA)
-
11
[C#] DataGridViewでコンボボックスでの変更がdataTableに反映されません
その他(プログラミング・Web制作)
-
12
C# DataGridViewで複数選択したセルに同じ値を一括で入力するには
C言語・C++・C#
-
13
DataGridView 列ごとの入力制限
Visual Basic(VBA)
-
14
SQL、2つのテーブルで条件一致したものだけdeleteする方法は?
Oracle
-
15
この行は既に別のテーブルに属しています
Visual Basic(VBA)
-
16
VB.NET DataGridView 縦スクロールバーを常に表示
Visual Basic(VBA)
-
17
Datatableへの代入
その他(プログラミング・Web制作)
-
18
DataGridViewの桁数制限に関して
Visual Basic(VBA)
-
19
フォームの再読み込み
Visual Basic(VBA)
-
20
DataGridViewで列、行、セルの選択
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAで一時中断したプログラムの...
-
MFC ボタンのEnableについて
-
グリッドビューでのチェックボ...
-
TabStripのイベントについて
-
クリック連打ソフト作成
-
Fancyboxのiframe内に閉じるボタン
-
Page_Load時にボタンクリックイ...
-
Ctrlキーを押しながらのダブル...
-
初期状態に戻す方法
-
ブラウザの×ボタン(閉じるボタ...
-
メール添付されたPDFファイルが...
-
エクセルVBAで画面の大きさを取...
-
getParameterで値が取得できず...
-
Accessの画面更新を一時的に停...
-
ページングが大量発生する原因...
-
ASP.NetのGridViewで任意の行ク...
-
ASP.net MVC セッションハイジ...
-
formの送信ボタンをテキストに...
-
submitボタンを横一列複数リン...
-
ACCESS2010 WEBブラウザーコン...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAで一時中断したプログラムの...
-
c# 文字列の最後から1文字削除...
-
Eclipseでクリーンが出来ない
-
JSPでメッセージボックスを表示...
-
DataGridViewのチェックボック...
-
メール添付されたPDFファイルが...
-
今更、VBAでRPA、キーボード操...
-
「押下」は「おうか」と読む?
-
javascript 別ウィンドウを開...
-
ロストフォーカスイベントとそ...
-
SPREADでカーソルの位置を1行目...
-
ブラウザの×ボタン(閉じるボタ...
-
JSPでボタンを押したら、文字が...
-
グリッドビューでのチェックボ...
-
表示ボタン押下すると、テキス...
-
Fancyboxのiframe内に閉じるボタン
-
GridViewの項目編集(初歩)
-
【C#】 : WindowsProgramming ...
-
Ctrlキーを押しながらのダブル...
-
C# Enterキーの動作について
おすすめ情報