- 題名: DataGridの使い方
- 日時: 2006/02/19 0:01:20
- ID: 15110
- この記事の返信元:
- (なし)
- この記事への返信:
- [15130] Re[1]: DataGridの使い方2006/02/20 10:06:36
- ツリーを表示
> 早速、trapemiyaさんの言われたようにやってみましたが、 > 例外ArgumentOutOfRangeExceptionが投げられてしまいます。 > 単純に「DataGridView[3, 10].Value = 5; 」の編集記述だけなのですが。 > 何故でしょう。単純にセル内に表示したいだけなのに… (T_T) 何マスの表を作られましたか? 5 x 5 = 25の表でしたら、インデックスは 縦横それぞれ0〜4までしかありません。 つまり、DataGridView[0, 0]からDataGridView[4, 4]までしか指定できません。 その状態でDataGridView[3, 10]の位置のセルを参照しようとしても、欄外 (OutOfRange)になってしまいます。 > あと、このセル表示を実現させるのに、空のデータベース(5*5=25)を > 読み込ませているのですが、アプリ内でこの「器」を用意してあげることは > できるでしょうか? 非バインドというのがそうだと思うのですが、行を > 追加できません。 例えば、以下の感じで、3列20行の表が作成できます。 dataGridView1.Columns.Add("room", "room"); dataGridView1.Columns[0].Width = 50; dataGridView1.Columns.Add("total", "total"); dataGridView1.Columns[1].Width = 50; dataGridView1.Columns.Add("vacant", "vacant"); dataGridView1.Columns[2].Width = 50; dataGridView1.Rows.Add(20); > 質問はこれを最後にしようかと思います。何卒お力を > お貸しください。 最後でなくて全然かまいません。よければまた質問してください。 ただし、私がいつもすぐに返答できるとは限りません。 でも、他の誰かがきっと返答してくれると思います。 >>DataGridViewのどこがクリックされたかはHitTestでいけます。 > > ありがとうございます。 > 勉強しながら少しずつやっていきます。 MSDN2まるコピーに近いですが、(^^; /// <summary> /// 右クリックした位置のセルのバックカラーをGreenに変える。 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void dataGridView1_MouseDown(object sender, MouseEventArgs e) { if (e.Button == MouseButtons.Right) { DataGridView.HitTestInfo hit = dataGridView1.HitTest(e.X, e.Y); if (hit.Type == DataGridViewHitTestType.Cell) { dataGridView1.Rows[hit.RowIndex].Cells[hit.ColumnIndex].Style.BackColor = Color.Green; } } } > 全くわかりませんので、この方法はパスさせていただきます。 > アイディアを頂いたのに却下で申し訳ないです。m(_ _)m いえいえ。 ちなみにこの方法は、自分で線を引いたり文字を書いたりして表を作るイメージです。 将来やってみたくなりましたら、GDI+とかCreateGraphicsなんかで検索されると良いと思います。
> 何マスの表を作られましたか? 5 x 5 = 25の表でしたら、インデックスは > 縦横それぞれ0〜4までしかありません。 > つまり、DataGridView[0, 0]からDataGridView[4, 4]までしか指定できません。 > その状態でDataGridView[3, 10]の位置のセルを参照しようとしても、欄外 > (OutOfRange)になってしまいます。 う〜ん、さすがにそれくらいはわかるのですが… ^^; [0,0]とかにしてもダメでした。読み込んだ空DB(Access)の設定が よくなかったのかもしれませんね。 > 例えば、以下の感じで、3列20行の表が作成できます。 > > dataGridView1.Columns.Add("room", "room"); > dataGridView1.Columns[0].Width = 50; > dataGridView1.Columns.Add("total", "total"); > dataGridView1.Columns[1].Width = 50; > dataGridView1.Columns.Add("vacant", "vacant"); > dataGridView1.Columns[2].Width = 50; > > dataGridView1.Rows.Add(20); 仰る通りにしたら出来ました。ありがとうございます。 また、上述の「DataGridView[3, 10].Value = 5; 」も今回は できました。前回、なぜ例外が投げられたのかは謎ですが。 でも、これで一つフォームのメドがつきました。 > > 質問はこれを最後にしようかと思います。何卒お力を > > お貸しください。 > > 最後でなくて全然かまいません。よければまた質問してください。 > ただし、私がいつもすぐに返答できるとは限りません。 > でも、他の誰かがきっと返答してくれると思います。 やさしいお言葉をありがとうございます。 また行き詰ったら、寄らせて頂きます。m(_ _)m > >>DataGridViewのどこがクリックされたかはHitTestでいけます。 > > > > ありがとうございます。 > > 勉強しながら少しずつやっていきます。 > > MSDN2まるコピーに近いですが、(^^; > > /// <summary> > /// 右クリックした位置のセルのバックカラーをGreenに変える。 > /// </summary> > /// <param name="sender"></param> > /// <param name="e"></param> > private void dataGridView1_MouseDown(object sender, MouseEventArgs e) > { > if (e.Button == MouseButtons.Right) > { > DataGridView.HitTestInfo hit = dataGridView1.HitTest(e.X, e.Y); > if (hit.Type == DataGridViewHitTestType.Cell) > { > dataGridView1.Rows[hit.RowIndex].Cells[hit.ColumnIndex].Style.BackColor = Color.Green; > } > } > } なるほど。 完全にはコードの意味が理解できませんが、使い方がわかりました。 頂いたコードを参考に、いろいろいじってみます。 > > 全くわかりませんので、この方法はパスさせていただきます。 > > アイディアを頂いたのに却下で申し訳ないです。m(_ _)m > > いえいえ。 > ちなみにこの方法は、自分で線を引いたり文字を書いたりして表を作るイメージです。> 将来やってみたくなりましたら、GDI+とかCreateGraphicsなんかで検索されると良いと思います。 了解しました。 本職とは別に片手間でやっておりますので、そこまでスキルアップできるか わかりませんが、チャレンジするときにはまたこの掲示板に現れると思いますので その節にはよろしくお願い致します。やっとオブジェクト指向の概念がわかりかけて きた段階ではありますが…^^; 度々の初歩的な質問に懇切丁寧に答えて頂き、ありがとうございました。m(_ _)m
分類:[.NET]
どうも、いつも拝見させて頂いております。
この度、下記のようなWinアプリを作ろうと思っているのですが、
実現方法がわかりませんので、皆さんのお知識を拝借できればと
思っております。
・例えば、ホテルやカラオケボックスのような有限個の客室を
DataGridまたはDataGridViewを使ってフォーム上に表示したい。
5×5=25室など、固定で。
・汎用性を持たせるため、AccessまたはSQLServerから客室データを
取得し、表示させたい。
データのX座標・Y座標を読み、フォーム上のDataGridの座標の
対応する位置へRoomNo. を表示させたい。
読み込むデータは以下のような感じ。
ID RoomNo. X Y
---------------------
01 101 0 0
02 102 0 1
03 103 0 2
| | | |
20 505 5 3
・一覧表示させた客室をダブルクリックするなどのイベントが
発生した際、例えば明細入力フォームなどを立ち上げたい。
これはHitTestメソッドを使えばいいんでしょうか。
のような感じです。上記のようなことは実現可能でしょうか?
もし、サーバから座標データを取得して表示させる方法が出来ない、
またはパフォーマンスが悪いのであれば、アプリ側でデータを
決めてしまってもいいのですが。
それとも、そもそもDataGridではなく他の方法で実装したほうが
よいのでしょうか。
環境およびスキル:
現在、VisualC#2005 ExpressEdition にて暫定的にコーディングを
行っておりますが、近いうちにパッケージを購入予定(Proがほしい
ですが、小遣いの都合上Stdになると思います)です。
また、私自身のプログラミング経験は、10年以上前に「C言語」のみで
オブジェクト指向は初挑戦です。プロではありません。
独習で試行錯誤しながらやっておりますが、実現可能ということで
あれば、勉強しながらやってみようと思います。
DataGridでは不可能であれば、進むべき道を提示して頂ければ幸いです。
よろしくお願いいたします。