お世話になります。ご協力お願いします。
環境: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で質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C# DatagridviewにExcelシートを反映するとエラーが出る 2 2023/05/06 17:12
- Excel(エクセル) Libreoffice calcで人名を取り消し線を入れたい。 2 2022/09/10 15:27
- Visual Basic(VBA) VBAのトグルボタンでのマクロについて質問です 3 2022/10/10 17:23
- Excel(エクセル) エクセルVBAでチェックボックスにチェックを入れる 1 2022/09/14 00:52
- 輸入車 BMWのアイドリングストップ機能について 2016年製のアクティブツアラーです。(中古車購入) 標準 3 2022/11/17 08:08
- Visual Basic(VBA) マクロ実行時、自動で背景色を変えたい。 C列にあるチェックボックスをチェックするとB列に「TRUE」 4 2022/11/08 11:14
- Visual Basic(VBA) 【再々投稿】VBAのプログラムで動作しなくて困っています 8 2022/10/14 09:06
- Visual Basic(VBA) 【前回の続き続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/24 20:49
- Windows 10 (続質問です No.3)Windows 10 ノートで電源OFF してもWinfi ランプが消えない 14 2023/07/22 19:48
- Access(アクセス) チェックボックスにチェックが入った後の挙動 1 2022/08/21 12:39
このQ&Aを見た人はこんなQ&Aも見ています
-
あなたの「必」の書き順を教えてください
ふだん、どういう書き順で「必」を書いていますか? みなさんの色んな書き順を知りたいです。 画像のA~Eを使って教えてください。
-
フォントについて教えてください!
みなさんの一番好きなフォントは何ですか? よく使うフォントやこのフォント好きだなあというものをぜひ教えてください!
-
2024年に成し遂げたこと
今年も残すところわずか。 皆さんが今年達成したことを教えていただきたいです。 どんな小さなものでも構いません。
-
【選手権お題その1】これってもしかして自分だけかもしれないな…と思うあるあるを教えてください
「出身中学と出身高校が混ざったような校舎にいる夢を見る」「まぶたがピクピクしてるので鏡で確認しようとしたらピクピクが止まってしまう」など、 これってもしかして自分だけかもしれないな…と思うあるあるを教えてください
-
14歳の自分に衝撃の事実を告げてください
タイムマシンで14歳の自分のところに現れた未来のあなた。 衝撃的な事実を告げて自分に驚かせるとしたら何を告げますか?
-
グリッドビューでのチェックボックス押下時イベント
Visual Basic(VBA)
-
「指定されたキャストは有効ではありません。」とエラーが出てしまいます。
Microsoft ASP
-
データグリッドビューの一番最初の行に列を追加したい
Visual Basic(VBA)
-
-
4
visual studio でインデントを自動的に揃えるショートカットキー
その他(プログラミング・Web制作)
-
5
DataGridViewの特定列に入力されている重複チェックをしたい
Visual Basic(VBA)
-
6
DataGridViewでyyyy/MM/dd
Visual Basic(VBA)
-
7
VB.NETで DataRow()を利用して、値からコードを取得したい。
Visual Basic(VBA)
-
8
DataGridViewの内容をDBに反映する時
Visual Basic(VBA)
-
9
フォームの再読み込み
Visual Basic(VBA)
-
10
データベースのデータをTextBoxに入力された値で検索しDataGridViewに表示する方法
Visual Basic(VBA)
-
11
DataGridViewに空白がある場合はエラーにしたい
Visual Basic(VBA)
-
12
DataGridViewでセルクリックイベントを発生させるには
Visual Basic(VBA)
-
13
別フォームから戻ったときのイベント
Visual Basic(VBA)
-
14
【C#】DataGridViewの最大列数について
システム
-
15
DataGrdViewに関連付けたデータの更新
C言語・C++・C#
-
16
C# dataGridViewの値だけクリア
C言語・C++・C#
-
17
VB.net
Visual Basic(VBA)
-
18
日付型のフィールドに空白を入れる方法を教えてください
その他(データベース)
-
19
DataGridViewで列、行、セルの選択
Visual Basic(VBA)
-
20
C#のループでtextboxに値を入れる方法
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・「みんな教えて! 選手権!!」開催のお知らせ
- ・漫画をレンタルでお得に読める!
- ・【選手権お題その2】この漫画の2コマ目を考えてください
- ・2024年に成し遂げたこと
- ・3分あったら何をしますか?
- ・何歳が一番楽しかった?
- ・治せない「クセ」を教えてください
- ・【大喜利】看板の文字を埋めてください
- ・【大喜利】【投稿~12/17】 ありそうだけど絶対に無いことわざ
- ・【選手権お題その1】これってもしかして自分だけかもしれないな…と思うあるあるを教えてください
- ・【穴埋めお題】恐竜の新説
- ・我がまちの「給食」自慢を聞かせてっ!
- ・冬の健康法を教えて!
- ・一番好きな「クリスマスソング」は?
- ・集合写真、どこに映る?
- ・自分の通っていた小学校のあるある
- ・フォントについて教えてください!
- ・これが怖いの自分だけ?というものありますか?
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・10代と話して驚いたこと
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
DataGridViewのチェックボック...
-
Eclipseでクリーンが出来ない
-
VBAで一時中断したプログラムの...
-
C# ListView内の検索機能について
-
EXCEL2010でセルが編集中かを判...
-
グリッドビューでのチェックボ...
-
c# 文字列の最後から1文字削除...
-
Page_Load時にボタンクリックイ...
-
Ctrlキーを押しながらのダブル...
-
メール添付されたPDFファイルが...
-
CheckBoxをボタン形式にして押...
-
VBのこのコードの意味を教えて...
-
SPREADでカーソルの位置を1行目...
-
表示ボタン押下すると、テキス...
-
今更、VBAでRPA、キーボード操...
-
AlertダイアログのOKボタンにつ...
-
【C#】 : WindowsProgramming ...
-
Fancyboxのiframe内に閉じるボタン
-
[VBA] Powerpoint のエントリー...
-
複数のSubmitボタンをname属性...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAで一時中断したプログラムの...
-
DataGridViewのチェックボック...
-
c# 文字列の最後から1文字削除...
-
グリッドビューでのチェックボ...
-
Eclipseでクリーンが出来ない
-
CheckBoxをボタン形式にして押...
-
メール添付されたPDFファイルが...
-
Fancyboxのiframe内に閉じるボタン
-
SPREADでカーソルの位置を1行目...
-
今更、VBAでRPA、キーボード操...
-
EXCEL2010でセルが編集中かを判...
-
VC++ MFC CListCtrlで、ボタン...
-
【C#】 : WindowsProgramming ...
-
JSPでメッセージボックスを表示...
-
Page_Load時にボタンクリックイ...
-
VBのこのコードの意味を教えて...
-
Ctrlキーを押しながらのダブル...
-
GridViewの項目編集(初歩)
-
C# ボタンを押すとyahooのサイ...
-
マウスのボタン判定について
おすすめ情報