none
GridViewにて各Itemの見出しにさらにグループ見出しを付けたい場合はどうするのか。 RRS feed

  • 質問

  • 丹羽と申します。

    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)つけるのは、難しいのでしょうか。

     

    ご存知の方は、アドバイスの程、よろしくお願い致します。

     

     

     

     

     

    2007年8月29日 5:59

回答

すべての返信

  • プロパティを設定するといった作業ではこのような表示はできません。
    PreRenderあたりのイベントのタイミングで、生成されるHTMLをプログラムから操作するような作業が必要になります。

     

    2007年8月29日 7:25
  • どっとねっとふぁん様

     

    ご返答ありがとうございます。

    ご教示頂いた、HTML操作を行うと、結構面倒そうなので、

    画面設計等でしない様にしたいと思います。

     

    ありがとうございました。

     

     

     

     

    2007年8月29日 8:17
  • 以下が参考になると思います。それほど難しいことではありませんよ。

     

    GridViewのHeaderRowについて
    http://forums.microsoft.com/msdn-ja/ShowPost.aspx?PostID=312902&SiteID=7

    2007年8月29日 8:40
    モデレータ
  • trampemiya様

    いつもお世話になっております。

     

    丹羽です。

    当スレッドの続きなのですが、ご教示頂きました、参考スレッドより

    Headerのグループ化はうまくゆきました。(GridView_RowCreated内でヘッダ作成)

     

    しかし、GridViewの各カラムでのソーティングを機能させるためには、

    どの様に設定してよいのか。悩んでおります。

     

    GridView側での設定は、『並べ替えを設定する。ON』

                                      列の編集→ 各BiindFieldのShowHeaderプロパティ False設定

                                                           同上       のHeaderTextプロパティ   未設定

       デザイン上ヘッダを表示しない状態です。

     

    ご存知でしたら、ご教示願います。

    よろしくお願い致します。

     

     

     

     

    2007年10月24日 5:55
  • ヘッダーのセルの中にLinkButtonなどを仕込み、そこがクリックされたらソートした結果でGridViewを表示すればいいんじゃないかと思います。例えば以下のようにして、ヘッダのセル内にLinkButtonを仕込めます。

     

       LinkButton lb = new LinkButton();
       lb.ID = "col1";
       lb.Text = "列名1";
       cell1.Controls.Add(lb);

    2007年10月24日 8:03
    モデレータ
  • trapemiya様

    いつもアドバイス有難うございます。

     

    ご教示頂いた内容をヘッダのセル内へ設定し、検証している次第です。

    サーバへのFormの送信は、行われるのですが、そのLinkButtonがクリックされたかどうかを

    検知する方法がございますでしょうか。

     

    検知する方法がわからないので、現在は、

    LinkButtonコントロールを設定時にサーバ側のイベントを設定しようとしましたが、

    OnClickプロパティは、現れません。OnClientClickには設定可能なので、

    クライアント側に適当な隠しフィールドを用意し、クリックさらたか否かを

    判定する値を設定するスクリプトを定義し、サーバ側で判断しようとしましたが、こちらも、クライアント側で

    インベント処理されませんでした。ポストバックするのが先に行われてしまう様な気がします。

     

    もう一点は、GridViewに関連づいているデータソースがObjectDataSourceで、

    データアクセスコンポーネント側では、動的にSQL文を作成するようにしていますので、

    ソートする事は、出来ると思いますが、読み込んでいるデータセットに対してソートする

    ような事は、出来るのでしょうか。

     

    GridViewにヘッダテキストを指定していた時(GUIで設定時)は、項目をクリックした場合、

    DBを読み込むところは、デバッグスクリプトが表示されるのですが、

    ソートしている部分がどの様に内部的に行われているのかわかりません。

    どの様に調べればよいのか。もしくは、参考サイトとご存知でしたらご教示お願い致します。

     

    よろしくお願い致します。

     

     

     

     

     

     

    2007年10月26日 1:08
  •  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イベントを利用して、セレクト用メソッドのソートをコントロールしてしまえばいいんじゃないかと思います。

    2007年10月26日 16:24
    モデレータ
  • trapemiya様

    いつもお世話になっております。

     

    ご教示の通り、LinkButtonクリックを感知する事ができました。

       ソース抜粋      AddHandler lb11.Click, AddressOf lb11_Click

    ソートについては、ObjectDataSource1 SelectMethodにソート制御を付加し実現できました。

    クリックしたコントロールは、どれなのか、及び、昇順、降順(同一項目LinkButton 2回連続クリック時)の

    判断を行うために以下の設定をしました。

      ①判断する変数として、Session変数に情報を格納。(LinkButtonイベント処理内で設定)

      ②ObjectDataSource1のSelectParametersには、このSession変数をパラメータとして渡す様設定。

      ③データアクセスコンポーネント(SelectMethod)には、②の変数を引数に追加。

      ④データアクセスコンポーネント(SelectMethod)のSQL文生成ロジックにOrderBy制御を追加。

     

    項目クリック時のソート表示、ページング表示等、正常に表示する事が出来ました。

     

    いつも的確なアドバイスを頂き、本当に助かっております。

    今後も、未熟者ですので、フォーラムへは、投稿する機会が多々あると思います。

    その際は、ご支援の程よろしくお願い致します。

     

     

    2007年10月29日 7:31