質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
DataGrid

GUIの一種であり、データを表の形式でみることが可能です。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Q&A

1回答

2634閲覧

Dictionary<T>の使い方

chi-o-

総合スコア8

DataGrid

GUIの一種であり、データを表の形式でみることが可能です。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

0グッド

0クリップ

投稿2016/02/18 03:07

編集2016/02/18 03:29

datagridview内にcheckboxを表示させ、checkの入っているものを印刷する機能を実装しています。チェックが入ったかどうかをDictionary<T>(キー(string)と値(bool))を入れて利用しています。
しかし、そのDictionary<T>にキーと値が入っておらず、上手く動かない状況です。どこがどう悪いのかも、正直見当が付きません。

まだC#の学習を始めたばかりで、今回の質問でも必要な情報が抜けているかもしれませんが、ご指摘いただければ助言いただくのに情報を随時挙げていきますので、宜しくお願いします。

C#

1private Dictionary<string, bool> _dicList = new Dictionary<string, bool>(); 2 3private void SetSelectedPrintDocument() { 4 this._printString.Clear(); 5 for (int row = 0; row < this.dataGridViewMain.RowCount; row++) { 6 string key = this.dataGridViewMain[ID_INDEX, row].Value.ToString(); 7 if (this._dicList[key] == true) { 8 this.CreateLabel(this.dataGridViewMain, row); 9 } 10 } 11 this._printStringIndex = 0; 12 this.printDocument1.DocumentName = ApplicationName + "Checked Record"; 13} 14 15private void ToolStripMenuItemFileSelectedPrintPreview_Click(object sender, EventArgs e) { 16 PrintPreviewDialog p = this.printPreviewDialog1; 17 p.Width = this.Width - 100; 18 p.Height = this.Height - 100; 19 SetSelectedPrintDocument(); 20 p.ShowDialog(); 21}

_dicListに値をセットする処理はこちらになります。

C#

1private void dataGridViewMain_CurrentCellDirtyStateChanged(object sender, EventArgs e) { 2 try { 3 if (this.dataGridViewMain.CurrentCellAddress.X == CHECKBOX_INDEX && this.dataGridViewMain.IsCurrentCellDirty) { 4 this.dataGridViewMain.CommitEdit(DataGridViewDataErrorContexts.Commit); 5 } 6 } 7} 8 9private void dataGridViewMain_CellValueChanged(object sender, DataGridViewCellEventArgs e) { 10 if (e.ColumnIndex == CHECKBOX_INDEX && e.RowIndex >= 0) { 11 string check = this.dataGridViewMain[CHECKBOX_INDEX, e.RowIndex].Value.ToString(); 12 string key = this.dataGridViewMain[ID_INDEX, e.RowIndex].Value.ToString(); 13 if (check == true.ToString()) { 14 this._dicList[key] = true; 15 } 16 else { 17 this._dicList[key] = false; 18 } 19 } 20}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ozwk

2016/02/18 03:11 編集

_dicListに値をセットする処理が見当たりませんが?
guest

回答1

0

こんにちは。

そのDictionary<T>にキーと値が入っておらず、上手く動かない状況です。

パッと見る限りですが、適切に動作すればキーと値はちゃんと設定されそうに見えます。
CheckBoxを反転させた時、dataGridViewMain_CellValueChanged()は呼ばれてますか?
dataGridViewMain_CellValueChanged()にブレークを張ってデバッグ実行してみてください。
ちゃんと呼ばれていたら、そのままステップ実行し、適切な方のthis._dicList[key] = true;this._dicList[key] = false;が実行されるのか確認下さい。(各変数をマウスでポイントすると、その内容が表示されます。)

一点気になるのは、if (check == true.ToString())です。なぜ文字列へ変換してから比較しているのでしょうか? dataGridViewMain[ID_INDEX, row].Value.ToString()はValueがtrueの時、本当にtrue.ToString()と同じ文字列になることは確認されましたか?

次に、適切な方が実行されるにもかかわらず設定されていない場合は、読出側の何らかのミスです。
上記と同様、SetSelectedPrintDocument()にブレークを張って、ステップ実行してみることをお勧めします。

投稿2016/02/18 08:21

Chironian

総合スコア23272

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問