C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[4]: 列数が動的なgridviewを作成したい


(過去ログ 47 を表示中)

[トピック内 7 記事 (1 - 7 表示)]  << 0 >>

■25398 / inTopicNo.1)  列数が動的なgridviewを作成したい
  
□投稿者/ おさむ (13回)-(2008/09/18(Thu) 22:08:10)

分類:[.NET 全般] 

分類:[ASP.NET (VB)] 
環境:[ASP.NET2.0、VB.NET visualstudio2005]

毎度毎度失礼します。。。。。
今回も宜しくお願いします。。。

現在、gridviewを使用し列数が動的なテーブルを作成しようとしています。(PageLoad時にheaderを表示しておきたいためにheader部は別テーブル(asp:Table)で作成)
動的と言ってもユーザが追加したり削除したりするのではなく、あるデーターテーブルのレコード分、列を作成したいのです。
(例:PageLoad時にsqlを投げ、取得したレコードが5レコードならdefault列(3列)+5行で8列のテーブルをgridviewで作成)
というような処理を行いのですが、色々と調べたのですが、手がかりすらない状態なのです。

何かヒントでも良いので分かる方がいましたら返答のほう宜しくお願いします。

また、別テーブルで作成しているheader部(asp:Table)も必然的に動的になってしまうのでheader部の列数も動的にしたいのですが(ColSpan= "*"、*を動的に持ちたい)、可能なのでしょうか?

宜しくお願いします。

引用返信 編集キー/
■25399 / inTopicNo.2)  Re[1]: 列数が動的なgridviewを作成したい
□投稿者/ ネタ好き (626回)-(2008/09/18(Thu) 22:10:25)
No25398 (おさむ さん) に返信
> 分類:[ASP.NET (VB)] 
> 環境:[ASP.NET2.0、VB.NET visualstudio2005]
>
> 毎度毎度失礼します。。。。。
> 今回も宜しくお願いします。。。
>
> 現在、gridviewを使用し列数が動的なテーブルを作成しようとしています。(PageLoad時にheaderを表示しておきたいためにheader部は別テーブル(asp:Table)で作成)
> 動的と言ってもユーザが追加したり削除したりするのではなく、あるデーターテーブルのレコード分、列を作成したいのです。
> (例:PageLoad時にsqlを投げ、取得したレコードが5レコードならdefault列(3列)+5行で8列のテーブルをgridviewで作成)
> というような処理を行いのですが、色々と調べたのですが、手がかりすらない状態なのです。
>
> 何かヒントでも良いので分かる方がいましたら返答のほう宜しくお願いします。
>
> また、別テーブルで作成しているheader部(asp:Table)も必然的に動的になってしまうのでheader部の列数も動的にしたいのですが(ColSpan= "*"、*を動的に持ちたい)、可能なのでしょうか?
>
> 宜しくお願いします。
>

じゃあ、ヒントを。
表示する内容を変更するたびに、プログラムで列を操作すればいいと思います。
列はどのオブジェクトが担当しているかを考えると解決できます。
引用返信 編集キー/
■25422 / inTopicNo.3)  Re[2]: 列数が動的なgridviewを作成したい
□投稿者/ おさむ (14回)-(2008/09/19(Fri) 10:22:19)
2008/09/19(Fri) 10:48:26 編集(投稿者)

No25399 (ネタ好き さん) に返信
> じゃあ、ヒントを。
> 表示する内容を変更するたびに、プログラムで列を操作すればいいと思います。
> 列はどのオブジェクトが担当しているかを考えると解決できます。

回答有難うございます。。

> 列はどのオブジェクトが担当しているか
すいません、訳分からない回答を一回してしまいました。。。。
rowCreate時かdatabound時にpageload時に得たレコード数を使用し、テーブルの列数を操作すれば良いのですかね???
なにぶんまだ技術が無いもので・・・分からない事だらけで・・・・すいません。。
引用返信 編集キー/
■25430 / inTopicNo.4)  Re[1]: 列数が動的なgridviewを作成したい
□投稿者/ いしだ (164回)-(2008/09/19(Fri) 11:48:43)
だいたいの手順ですが、以下のようになるんじゃないでしょうか。
1.Page_Loadで列取得
2.BoundField列を作成し、GridViewに設定
3.DataTableを作成し、列を設定
4.表示データをDataTableに取得
5.GridViewのDataSourceにDataTableを設定しBindする

ヘッダーを別テーブルにするのではなく、EmptyDataTemplateに指定してやってはどうでしょうか。

引用返信 編集キー/
■25434 / inTopicNo.5)  Re[2]: 列数が動的なgridviewを作成したい
□投稿者/ ロック (98回)-(2008/09/19(Fri) 12:57:58)
>テーブルの列数を操作すれば良いのですかね???
たぶん逆の発想ですね
DataTableの列数を制御するのではなく、GridViewの列を制御します。

>また、別テーブルで作成しているheader部(asp:Table)も必然的に動的...
この別テーブルでGridViewの列を任意に作成でいけると思います。
その方法をいしださんが既に書かれていますので、お節介ながら少し詳細に書くと(C#ですけど)
#ヘッダーは別テーブルのままを前提にしています。

GridView1.AutoGenerateColumns = false; <-これが無いとバインドした時に列が二重に作成されます。
// ↓この辺の処理を列数分回せばok
BoundField cTextCol;
cTextCol = new BoundField();
cTextCol.HeaderText = "ヘッダー名";
cTextCol.DataField = "データベースの列名";
GridView1.Columns.Add(cTextCol);
//
GridView1.DataSource = データテーブル;
GridView1.DataBind();

引用返信 編集キー/
■25457 / inTopicNo.6)  Re[3]: 列数が動的なgridviewを作成したい
□投稿者/ おさむ (15回)-(2008/09/19(Fri) 16:07:50)
>>■No25430 (いしだ さん)
大変に参考になるアドバイス有難うございます。。。
現在、アドバイスに従い、作成しているところです。。
1つ質問なんですが、EmptyDataTemplateというのはデータをバインドした際にデータが無い場合に使用する項目??DataTemplateという考えで合ってますよね??

>>■No25434 (ロック さん) に返信
さらに詳しく、ソースまで書いて頂き本当に助かります。。。
昨日の時点では何をすればよいのかすらあやふやな状態だったので、アドバイスがとても助けになっています。。。

>>いしだ さん、ロック さん
現在の状況としましては、PageLoad時にsqlを投げ、そのレコード分をRowDataBoundイベントにひっぱり、RowDataBoundイベントでヘッダーを作成しています(ヘッダー行として作成したrowを一行目にAdd)。
最初は別テーブルで作成しようとしていたのですが、他のページとの仕様が違うということでダメだしがでました。。。。
そのためAutoGenerateSelectButtonをTrueにし、その列をhiddenで隠すという事をして(使用しない)、データが無くてもヘッダーが出るように無理やりしています。。。
RowDataBoundイベントでセルの項目数を指定し、表示する項目名をDBから引っ張ってくるところまではうまくいっています。

また、何かありましたら、質問したいと思います。。。ありがとうございました。
これからもお願いします。。。。。
引用返信 編集キー/
■25465 / inTopicNo.7)  Re[4]: 列数が動的なgridviewを作成したい
□投稿者/ いしだ (165回)-(2008/09/19(Fri) 18:53:00)
> EmptyDataTemplateというのは...
データ件数が1件も無い時に表示されますね。

25430の説明ですが、GridViewの列を作成するのはPage_LoadでなくPage_Initのが
良さそうです。
もう必要無いでしょうが、ご参考まで。。

引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -