- PR -

動的なDataGrid

投稿者投稿内容
es
常連さん
会議室デビュー日: 2003/08/18
投稿数: 20
投稿日時: 2003-08-18 21:08
はじめて書かせていただきます。どなたか教えてください。

ASPなんですけど、DataGridでテーブルを表示したいのですが、その前のページでコマンドボックス等で表示したいカラムを選択し、そのカラムのみをDataGrid上で表示させるにはどうしたらよいでしょうか?
説明が不十分かと思いますがお願いします。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2003-08-19 08:13
引用:

esさんの書き込み (2003-08-18 21:08) より:

ASPなんですけど、DataGridでテーブルを表示したいのですが、その前のページでコマンドボックス等で表示したいカラムを選択し、そのカラムのみをDataGrid上で表示させるにはどうしたらよいでしょうか?


 ASPですか?ASP.NETですか?←意地悪な質問やなぁ

 似たようなことをやろうとしています。デフォルトでは、自動的にカラムを作ることになっているので、SELECT文を、選択したカラムだけで発行してバインドしてやるとできませんか?
ぴで
大ベテラン
会議室デビュー日: 2002/10/10
投稿数: 123
お住まい・勤務地: 東京
投稿日時: 2003-08-19 09:11
autogeneratecolumns="False"でカラムの位置が決まっているなら

DataGrid.Columns[index].Visible = true/false;
とか。
es
常連さん
会議室デビュー日: 2003/08/18
投稿数: 20
投稿日時: 2003-08-20 22:54
Jittaさん、びでさんありがとうございます。

初心者なもので、他にも解らないことが多くて…。
今、やろうとしていることは、リストボックスが2つあって、1つ目にテーブルの選択、2つ目にカラムの選択を考えています。理想は同一ページ上で、1つ目を選択した時点でDataGridに対応したテーブルが表示され、2つ目の選択で選択したカラムの表示をしたいんです。
この場合は、1つ目のリストボックスの数だけDataGridを作って表示/非表示した方がいいんですかね???
選択に合わせてSELECT文の内容を変えた方が賢明ですかね?SELECT文の部分がまだ良くわかってないものですから、どうしたらよいものか…

よろしければ、ご説明お願いします。
es
常連さん
会議室デビュー日: 2003/08/18
投稿数: 20
投稿日時: 2003-08-20 22:56
ぴでさんでした。
名前間違えてしまってすいません。

Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2003-08-21 09:00
引用:

esさんの書き込み (2003-08-20 22:54) より:

今、やろうとしていることは、リストボックスが2つあって、1つ目にテーブルの選択、2つ目にカラムの選択を考えています。理想は同一ページ上で、1つ目を選択した時点でDataGridに対応したテーブルが表示され、2つ目の選択で選択したカラムの表示をしたいんです。


 ASP.NET、Web上のシステムですよね?それならば、理想的には、そのように変更が即時に反映されるようなシステムとして設計するべきではありません。Webなので、クライアントで行った変更をサーバに通知し、サーバでページを構成するオブジェクトを再構築した後に変更を行い、クライアントに通知し、クライアントがページを再表示する、という手順が取られます。即時反映させると、ネットワークの負荷もサーバの負荷もあがります。負荷があがれば反応が鈍くなります。反応が鈍くなればユーザからクレームがでます…

 限られた空間で、高速のネットワーク環境であり、使用するサーバ/クライアントPCも十分に高速である、という、ごく高価な環境であるなら別ですが。

 それが満足されるとして、
ListBox1…テーブル名一覧
ListBox2…列名一覧
DataGrid1…ListBox1で選択されたテーブルのうち、ListBox2で選択された列のみ表示
ですね?ここでListBox1をマルチセレクトにすると、ListBox2で表示するべき列名が、どのテーブルのものかまで表示しなければならず、ユーザにとってかえって負担となります(もちろん開発者も)。このため、ListBox1はシングルセレクトとします。

 ListBox1、ListBox2とも、AutoPostbackをTrueにします。ListBox2はマルチセレクトにします。ListBox1のSelectIndexChangedイベントで、DataAdapter.FillメソッドでDataTableにデータを放り込み、DataColumnsから列名を取り出してListBox2にセットし、すべてをSelected=Trueにします。DataGrid1.DataSourceに取得したDataTableを設定し、DataGrid1.Bindメソッドを呼び出します。ListBox2のSelectIndexChangedイベント(マルチにしたら、別のイベントかもしれない)で、選択された列のみ、表示させるようにDataGrid1のプロパティを変更します。

こんな感じでどうでしょう?
es
常連さん
会議室デビュー日: 2003/08/18
投稿数: 20
投稿日時: 2003-08-21 22:32
Jittaさんありがとうございます、勉強になります。

確かに処理が遅くなってます。
ListBoxでマルチにしたんですけど、思うように選択されたカラムが取得できません。
ASP.NETだと、参考になるもの少ないですし、難しさを思い知らされてます。

ぴでさんが書いてました、autogeneratecolumns="False"をTrueにした時にVisibleをうまく使う方法はないんでしょうか?考えているいるうちに表示/非表示した方が後々にいいかと思いまして。

度々すいません。よろしかったら、教えてください。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2003-08-22 09:28
引用:

esさんの書き込み (2003-08-21 22:32) より:
ListBoxでマルチにしたんですけど、思うように選択されたカラムが取得できません。
ASP.NETだと、参考になるもの少ないですし、難しさを思い知らされてます。


 マルチセレクトにすると、SelectedIndexは使えません(一番上だけが入る)。Itemを0からCountまで回して、SelectedがTrueかFalseか調べる必要があります。それでダメですか?

参考・・・私のbookmarkの「資料」フォルダに入っているURL
http://www.asp.net/Default.aspx?tabindex=0&tabid=1
http://www.gotdotnet.com/japan/
http://www.kawabata.com/Forums/Default.aspx
http://homepage3.nifty.com/dotnetfan/

スキルアップ/キャリアアップ(JOB@IT)