トップ回答者
DataGridViewで表の切り替え

質問
回答
-
>今回行おうとした事は、表全体を変数へ格納し、再度呼び出して表示という事です。
まず、「表」という言葉を使うのをやめましょう。DataGridView のことを言っているのか、それに表示する値の集合を言っているのかわかりません。
>コントロール自体は一つだけです。
これも、「コントロール」ではなく「DataGridView」と明示してください。
フォームデザイナーに表示されているフォームに DataGridView は配置しましたか?それは一つだけですか?
たとえばその DataGridView の Name が dataGridView1 だったとして、
void ShowData(string key) { this.dataGridView1.Rows.Clear(); (var rowValues in GetData(key)) { // 新しい行のインデックス int rowIndex = dataGridView1.Rows.Add(); // 新しい行に対してデータを割り当てる。 ... } }
というような感じで、何かの値(この場合は string key)を元に DataGridView を表示内容を更新するメソッドを作ることは可能ですか?- 回答としてマーク egrg 2011年12月15日 5:04
すべての返信
-
・TreeViewでツリーの生成
・DataGridViewで行列の追加(表フォーマットの生成)
以上二つが完成していますが、ご指摘のTreeViewのAfterSelectイベントハンドラだけが思いつきません。
dgv = new DataGridView[10] ・ ・ ・ private void trv_AfterSelect(object sender, TreeViewEventArgs e) { DataGridView = dgv[trv.SelectedNode.Index]; DataGridView.Show(); }
のようにやってみたものの駄目でした。
-
> dgv = new DataGridView[10]ツリーノードの数だけデータグリッドビューを用意するのですか?DataGridView は一つだけではないのですか?選択されたノードの情報を元にツリービューの行を作っていきます。private void trv_AfterSelect(object sender, TreeViewEventArgs e){//DataGridVew の行をクリアthis.dgv.Rows.Clear();// e.Node を元に DataGridVew の行を作成...}> 駄目でした。「駄目でした」ではなく「どう駄目だったのか」を書いてください。
- 編集済み galaco 2011年12月2日 7:27
-
インスタンスの意味、理解されていますか。
コントロールの意味も取り違えて使っているような気がします。>ノードをクリックしてもDataGridViewの表示が切り替わりませんでした。その際、例外は発生していませんか。
>結果的には間違っていますが、コントロールに表示されている表をインスタンス化したつもりです。いいえ、インスタンス化できていません。
このコードを正しく動かすには、dgv配列の各要素に「インスタンス化」されたDataGridViewコントロールが必要です。
それらはFormの子コントロールであり、各プロパティも正しく値が設定されている必要があるでしょう。
これらの初期化は済んでいますか。そして、新しいコントロールを表示する前に、今まで表示されていたコントロールを非表示にする必要もあるでしょう。#DataGridViewのインスタンスをノードの数だけ用意するよりも、表示するデータだけを切り換える方がスマートだと思いますが。
-
>インスタンスの意味、理解されていますか。
申し訳ないのですが、分かっていません。
C++やマイコン用のC言語を使っているのですが、C#のプログラミングはこれが2回目です。
本やMSDNのプログラム例を見ながらプログラムしていたのですが、問題部分で詰まってしまいここで質問させていただきました。
>その際、例外は発生していませんか。
発生していません。
>表示するデータだけを切り換える方がスマートだと思いますが。
それを行いたいのです。
今回行おうとした事は、表全体を変数へ格納し、再度呼び出して表示という事です。
ですが、やはりよく分からないまま止まっています。
-
>今回行おうとした事は、表全体を変数へ格納し、再度呼び出して表示という事です。
まず、「表」という言葉を使うのをやめましょう。DataGridView のことを言っているのか、それに表示する値の集合を言っているのかわかりません。
>コントロール自体は一つだけです。
これも、「コントロール」ではなく「DataGridView」と明示してください。
フォームデザイナーに表示されているフォームに DataGridView は配置しましたか?それは一つだけですか?
たとえばその DataGridView の Name が dataGridView1 だったとして、
void ShowData(string key) { this.dataGridView1.Rows.Clear(); (var rowValues in GetData(key)) { // 新しい行のインデックス int rowIndex = dataGridView1.Rows.Add(); // 新しい行に対してデータを割り当てる。 ... } }
というような感じで、何かの値(この場合は string key)を元に DataGridView を表示内容を更新するメソッドを作ることは可能ですか?- 回答としてマーク egrg 2011年12月15日 5:04
-
TreeView の 各ノードにキーを持たせます。Text プロパティをそのまま使えるならそれも良いですし、Tag プロパティなら任意を型を入れることもできます。
そして、AfterSelect イベントハンドラでメソッドを呼び出すだけです。
private void trv_AfterSelect(object sender, TreeViewEventArgs e) { ShowData(e.Node.Text); // Tagプロパティを使う場合 //ShowData((string)e.Node.Tag); }
- 編集済み galaco 2011年12月8日 7:09