トップ回答者
GridViewにて各Itemの見出しにさらにグループ見出しを付けたい場合はどうするのか。

質問
-
丹羽と申します。
VS2005にてASP.NET を勉強中です。
Webサーバコントロール(GridVeiw)にて質問があります。
GridViewに関係付けた(SqlDataSource等)Itemのタイトルは、それぞれ編集できるのですが、
タイトルにグループ見出しのようなタイトルを表示するのは、無理なのでしょうか。
具体的にいいますと
__________________________________
| | | GroupTitle |
|Title1 | Title2 |--------|--------|
|_______|________|_Title3_|_Title4_|
上記、例ですと、わかりづらいと思うのですが、HTMLでは、
以下の様な感じです。
<table>
<tr>
<td rowspan="2" >Title1</td>
<td rowspan="2" >Title2</td>
<td colspan="2" >GroupTitle</td>
</tr>
<tr>
<td>Title3</td>
<td>Title4</td>
</tr>
</table>
実際にいろいろやってみましたが、Item個々に対しての設定は、色々あるのですが、
上記のようなタイトル(GroupTitle)つけるのは、難しいのでしょうか。
ご存知の方は、アドバイスの程、よろしくお願い致します。
回答
-
以下が参考になると思います。それほど難しいことではありませんよ。
GridViewのHeaderRowについて
http://forums.microsoft.com/msdn-ja/ShowPost.aspx?PostID=312902&SiteID=7
すべての返信
-
以下が参考になると思います。それほど難しいことではありませんよ。
GridViewのHeaderRowについて
http://forums.microsoft.com/msdn-ja/ShowPost.aspx?PostID=312902&SiteID=7 -
trampemiya様
いつもお世話になっております。
丹羽です。
当スレッドの続きなのですが、ご教示頂きました、参考スレッドより
Headerのグループ化はうまくゆきました。(GridView_RowCreated内でヘッダ作成)
しかし、GridViewの各カラムでのソーティングを機能させるためには、
どの様に設定してよいのか。悩んでおります。
GridView側での設定は、『並べ替えを設定する。ON』
列の編集→ 各BiindFieldのShowHeaderプロパティ False設定
同上 のHeaderTextプロパティ 未設定
デザイン上ヘッダを表示しない状態です。
ご存知でしたら、ご教示願います。
よろしくお願い致します。
-
trapemiya様
いつもアドバイス有難うございます。
ご教示頂いた内容をヘッダのセル内へ設定し、検証している次第です。
サーバへのFormの送信は、行われるのですが、そのLinkButtonがクリックされたかどうかを
検知する方法がございますでしょうか。
検知する方法がわからないので、現在は、
LinkButtonコントロールを設定時にサーバ側のイベントを設定しようとしましたが、
OnClickプロパティは、現れません。OnClientClickには設定可能なので、
クライアント側に適当な隠しフィールドを用意し、クリックさらたか否かを
判定する値を設定するスクリプトを定義し、サーバ側で判断しようとしましたが、こちらも、クライアント側で
インベント処理されませんでした。ポストバックするのが先に行われてしまう様な気がします。
もう一点は、GridViewに関連づいているデータソースがObjectDataSourceで、
データアクセスコンポーネント側では、動的にSQL文を作成するようにしていますので、
ソートする事は、出来ると思いますが、読み込んでいるデータセットに対してソートする
ような事は、出来るのでしょうか。
GridViewにヘッダテキストを指定していた時(GUIで設定時)は、項目をクリックした場合、
DBを読み込むところは、デバッグスクリプトが表示されるのですが、
ソートしている部分がどの様に内部的に行われているのかわかりません。
どの様に調べればよいのか。もしくは、参考サイトとご存知でしたらご教示お願い致します。
よろしくお願い致します。
-
niway さんからの引用
サーバへのFormの送信は、行われるのですが、そのLinkButtonがクリックされたかどうかを検知する方法がございますでしょうか。
LinkButtonのクリックは以下のようにすれば感知できます。lb.Click += new EventHandler(lb_Click);
void lb_Click(object sender, EventArgs e)
{
this.ObjectDataSource1.Select();
}niway さんからの引用
もう一点は、GridViewに関連づいているデータソースがObjectDataSourceで、データアクセスコンポーネント側では、動的にSQL文を作成するようにしていますので、
ソートする事は、出来ると思いますが、読み込んでいるデータセットに対してソートする
ような事は、出来るのでしょうか。
ASP.NETの仕組み上、これは難しいと思います。なぜなら、読み込んでいるデータセットは、次のポストバック時にはデータセットをセッション変数などに入れておき、そこから復元でもしない限り、存在しないからです。データセットは常にObjectDataSourceから返されるため、もしやるとすればObjectDataSourceのTypeNameに指定されたクラス内でデータセットを保存して使い回すようなことになると思います。しかし、こんなことをするよりは素直にデータベースから読み直した方が良いでしょう。さて、実際には、ObjectDataSource1_Selectingイベントを利用して、セレクト用メソッドのソートをコントロールしてしまえばいいんじゃないかと思います。
-
trapemiya様
いつもお世話になっております。
ご教示の通り、LinkButtonクリックを感知する事ができました。
ソース抜粋 AddHandler lb11.Click, AddressOf lb11_Click
ソートについては、ObjectDataSource1 SelectMethodにソート制御を付加し実現できました。
クリックしたコントロールは、どれなのか、及び、昇順、降順(同一項目LinkButton 2回連続クリック時)の
判断を行うために以下の設定をしました。
①判断する変数として、Session変数に情報を格納。(LinkButtonイベント処理内で設定)
②ObjectDataSource1のSelectParametersには、このSession変数をパラメータとして渡す様設定。
③データアクセスコンポーネント(SelectMethod)には、②の変数を引数に追加。
④データアクセスコンポーネント(SelectMethod)のSQL文生成ロジックにOrderBy制御を追加。
項目クリック時のソート表示、ページング表示等、正常に表示する事が出来ました。
いつも的確なアドバイスを頂き、本当に助かっております。
今後も、未熟者ですので、フォーラムへは、投稿する機会が多々あると思います。
その際は、ご支援の程よろしくお願い致します。