- PR -

100カラム以上のDataGrid

投稿者投稿内容
toki
会議室デビュー日: 2003/09/04
投稿数: 3
投稿日時: 2003-09-04 18:31
みなさま、よろしくお願いします。

16個のDBから120項目を抽出してDataGridに表示させようとしています。
しかしDataSetを利用しようとすると、
「100項目以上のテーブルは作れません」
と出てしまいます。

何か良い方法をご存知の方いらっしゃいましたらご教授お願いいたします。


--環境--
VB.NET
ADO.NET
SQL2000Server
Win2k
きくちゃん
ぬし
会議室デビュー日: 2003/08/01
投稿数: 854
お住まい・勤務地: 都内某所
投稿日時: 2003-09-04 20:28
tokiさん、こんばんは。

引用:

16個のDBから120項目を抽出してDataGridに表示させようとしています。
しかしDataSetを利用しようとすると、
「100項目以上のテーブルは作れません」
と出てしまいます。


「16個のDB」というのが16個のテーブルの事で、それらをJOINした結果を1つのDataTableにFillしようとしているんでしょうか?
そうであると仮定して、例えば、そのSQLをサブクエリ単位でいくつかに分割して、対応させる複数のDataTableをDataSet側に定義し(リレーションの設定も行う)、DataGridで階層表示にする、という手は如何でしょうか。

または、DataGridはArrayListにバインド出来るらしいので、120のメンバ変数(またはプロパティ)を持つクラスなり構造体なりにデータを格納してArrayListに追加するという手も、使えるかも知れません。

【追記】
データ格納用のクラスをArrayListに追加する方法ですが、メンバ変数ではなく、プロパティで公開すればDataGridにバインドして表示出来る事を確認しました。


[ メッセージ編集済み 編集者: きくちゃん 編集日時 2003-09-05 12:52 ]
聖人@SKB
ベテラン
会議室デビュー日: 2003/03/26
投稿数: 58
お住まい・勤務地: 横浜(MM21)勤務の筈だがいつも顧客先常駐
投稿日時: 2003-09-04 20:44
「いかにして120項目をDataGridに表示するか」の解決策ではありません。
上記の回答を求める場合,読み飛ばして下さい。

私なら,
 ・n個まで項目を出力可能です。
 ・ユーザは出力項目を選ぶことができます。
という仕様にしますね。
そして,
SQLServer側:
  ・16個のテーブルから120項目抽出するViewを作る
アプリ側:
  ・Viewの項目名一覧を表示する
  ・ユーザが選んだ項目のみDataGridに出力する
として実装すると思います。
選択した項目情報を保存しておき,再利用可能にするのもいいなぁ。


私なら「120項目を常に見たい」と思わないので,こんな回答になりました。
常に見る必要があるなら,この方法は成り立ちません。
ぴで
大ベテラン
会議室デビュー日: 2002/10/10
投稿数: 123
お住まい・勤務地: 東京
投稿日時: 2003-09-04 22:49
そんな制限があったんだ〜と思ってこんなコードを書いてみましたが、
エラーにはなりませんでした。
ADOのエラーですか?コードとかエラーの内容を書いたほうが
回答が得やすいと思いますよ。
コード:
DataTable dt = new DataTable();
for(int i=0; i<120; i++) {
  dt.Columns.Add("col" + i.ToString());
}
DataRow dr = dt.NewRow();
for(int i=0; i<120; i++) {
  dr[i] = "data" + i.ToString();
}
dt.Rows.Add(dr);
DataView dv = new DataView(dt);
tbl.DataSource = dv;
tbl.DataBind();


引用:
私なら,
 ・n個まで項目を出力可能です。
 ・ユーザは出力項目を選ぶことができます。
という仕様にしますね。

私もそうしてますが、まぁ他人の考えた仕様をどうこう言わずに
解決策を考えてあげましょうよ。
解決することで自分の知識になることもあるし。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2003-09-05 08:53
別の方向に行ってます、失礼。
引用:

ぴでさんの書き込み (2003-09-04 22:49) より:
引用:
私なら,
 ・n個まで項目を出力可能です。
 ・ユーザは出力項目を選ぶことができます。
という仕様にしますね。

私もそうしてますが、まぁ他人の考えた仕様をどうこう言わずに
解決策を考えてあげましょうよ。
解決することで自分の知識になることもあるし。


 私は、それも解決策の1つと思いますよ。120項目並べると、かなり見難いですよ。特に、ある人にとっては110番目の項目が常に見たい場合、必ず長いスクロールをしなければなりません。そして、その項目に対するキーが1番目だったりしたら・・・

 ユーザの言うなりで作ればよいわけではないでしょう。ユーザにとっていかに便利作るか、それがソリューション(解決)ではないでしょうか。
#もっとも、こっちが便利であると思うことが、
#ユーザにとっても便利であるとは限らないのですが
未記入
ベテラン
会議室デビュー日: 2002/09/10
投稿数: 68
投稿日時: 2003-09-05 09:06
確かSqlDataAdapterの方にカラム100個までという制約があったような気がします。
DataAdapterを使わずにSqlCommandとSqlConnectionを使って
DataSetにデータをFillすればいけたような....

未確認です。すいません。
きくちゃん
ぬし
会議室デビュー日: 2003/08/01
投稿数: 854
お住まい・勤務地: 都内某所
投稿日時: 2003-09-05 09:25
仕様書無しさん、お早うございます。

引用:

確かSqlDataAdapterの方にカラム100個までという制約があったような気がします。



データアダプタ構成ウィザードを使って、「SELECT 1, 2, 3, 4, ...., 120」というSQLを書いてみたのですが、確かに「エラーが発生しました」と表示されますね。
しかし、SqlDataAdapterからデータセットの生成を実行しても、コンパイルして実行してもエラーは発生しませんでした。問題なく120のカラムを持つグリッドが表示されます。
こちらの環境はVS.NET 2003ですが、2002ではどうだったんでしょう...。

toki
会議室デビュー日: 2003/09/04
投稿数: 3
投稿日時: 2003-09-05 15:13
投稿者です。
皆様、さまざまなアドバイス、ありがとうございました。

誤り>
×16個のDB
○16個のテーブル

出力カラム数120について>
私も多いと思います;;
聖人さんのおっしゃるように利用者が出力項目を選べるように
するのが最終目的です。そして、最大120カラム出力しなければならないので
このような質問を投稿させていただきました。

質問方法>
まだ慣れていないため、わかりにくくてすみませんでした。
次回からはコードも書くようにします。

皆様のアドバイスを元に、これから作成してみたいと思います。
また質問させていただくときは、よろしくお願いいたします。

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