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

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

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

Re[2]: GridViewで複数ヘッダー表示した際のソート処理


(過去ログ 71 を表示中)

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

■41237 / inTopicNo.1)  GridViewで複数ヘッダー表示した際のソート処理
  
□投稿者/ 新人A (1回)-(2009/09/15(Tue) 23:39:43)

分類:[ASP.NET (VB)] 

2009/09/16(Wed) 06:56:12 編集(投稿者)
開発環境:VisualStudio2008
使用言語:asp.net/vb.net
でwebシステムを構築中です。


1明細が複数行でヘッダーを押下時、ソート処理を行うgridviewを作成中です。
ソート処理はgridview_RowCommandで行っています。

現在、GridViewで複数ヘッダー表示した際の2列目の2行目から4列目のヘッダー6からヘッダー8のヘッダーLinkを押下時にgridview_RowCommandを通りません。
ヘッダー1からヘッダー4まではaspのsortexpressionで表示しているためLinkを押下すると問題なくgridview_RowCommandを通ります。
ヘッダー5もLinkを押下すると問題なくgridview_RowCommandを通ります。


作成している画面は下記のような画面です。
--------------------------------------------
|ヘッダー1|ヘッダー2|ヘッダー3|ヘッダー4|
--------------------------------------------
|ヘッダー5|ヘッダー6|ヘッダー7|ヘッダー8|
--------------------------------------------
|明細1  |明細2  |明細3  |明細4  |
--------------------------------------------
|明細5  |明細6  |明細7  |明細8  |
--------------------------------------------

ヘッダー5からヘッダー8を1行目から削除し、2行目にaddしています。

ソースを下記に記述いたします。下記はgridview_RowDataBoundに記述しています。

        '-------------------------------------------------------------------------------
        ' ヘッダー2段目
        '-------------------------------------------------------------------------------
        ' ヘッダー5
        Dim tblHeader5 As TableCell = New TableCell()
        Dim lnkHeader5 As LinkButton = New LinkButton
        ' リンク表示
        lnkHeader5.Text = gridView.Columns(4).HeaderText()
        tblHeader5.Controls.Add(lnkHeader5)

        ' ヘッダー6
        Dim tblHeader6 As TableCell = New TableCell()
        Dim lnkHeader6 As LinkButton = New LinkButton
        ' リンク表示
        lnkHeader6.Text = gridView.Columns(5).HeaderText()
        tblHeader6.Controls.Add(lnkHeader6)

        ' ヘッダー7
        Dim tblHeader7 As TableCell = New TableCell()
        Dim lnkHeader7 As LinkButton = New LinkButton
        ' リンク表示
        lnkHeader7.Text = gridView.Columns(6).HeaderText()
        tblHeader7.Controls.Add(lnkHeader7)

        ' ヘッダー8
        Dim tblHeader8 As TableCell = New TableCell()
        Dim lnkHeader8 As LinkButton = New LinkButton
        ' リンク表示
        lnkHeader8.Text = gridView.Columns(6).HeaderText()
        tblHeader8.Controls.Add(lnkHeader8)

        Dim rowfst As GridViewRow = New GridViewRow(-1, -1, DataControlRowType.Header, DataControlRowState.Normal)
        ' 各セルを行に追加
        rowfst.Cells.Add(tblHeader5)
        rowfst.Cells.Add(tblHeader6)
        rowfst.Cells.Add(tblHeader7)
        rowfst.Cells.Add(tblHeader8)

        ' 行追加
        tbl.Rows.Add(rowfst)

        ' Command イベントに渡さるコマンド名の設定
        lnkHeader5.CommandName = "sort"
        lnkHeader6.CommandName = "sort"
        lnkHeader7.CommandName = "sort"
        lnkHeader8.CommandName = "sort"

        ' Command イベントに渡さるパラメータの設定
        lnkHeader5.CommandArgument = "5"
        lnkHeader6.CommandArgument = "6"
        lnkHeader7.CommandArgument = "7"
        lnkHeader8.CommandArgument = "8"

ご指導お願いいたします。

引用返信 編集キー/
■41261 / inTopicNo.2)  Re[1]: GridViewで複数ヘッダー表示した際のソート処理
□投稿者/ gtk2k (77回)-(2009/09/16(Wed) 18:07:30)
2009/09/16(Wed) 18:09:00 編集(投稿者)

実際にこっちでもコードを書いてみて実行(VWD2008)してみたら、
CommandNameを"Sort"(大文字小文字関係なし)に設定すると、RowCommandではなく、Sortingイベントが実行されるようです。
また、その際にCommandArgumentに設定したものは、Sortingイベントの引数eのSortExpressionプロパティに
渡されるようです。つまり、1列目のSortExpressionを設定したのとほぼ同じ動作となりました。
引用返信 編集キー/
■41267 / inTopicNo.3)  Re[2]: GridViewで複数ヘッダー表示した際のソート処理
□投稿者/ もりお (82回)-(2009/09/16(Wed) 18:51:36)
目先を変えてヘッダーテンプレートに LinkButton を2つ配置
するのはいかがでしょうか。

<asp:TemplateField HeaderText="name" SortExpression="name">
    ...
    <HeaderTemplate>
        <asp:LinkButton ID="LinkButtonName" runat="server" CommandArgument="name" 
                CommandName="Sort">NAME</asp:LinkButton>
        <br />
        <asp:LinkButton ID="LinkButtonAge" runat="server" CommandArgument="age" 
            CommandName="Sort">AGE</asp:LinkButton>
    </HeaderTemplate>
    ...
</asp:TemplateField>

引用返信 編集キー/
■41362 / inTopicNo.4)  Re[2]: GridViewで複数ヘッダー表示した際のソート処理
□投稿者/ 新人 (19回)-(2009/09/18(Fri) 14:20:02)
No41261 (gtk2k さん) に返信
> 2009/09/16(Wed) 18:09:00 編集(投稿者)
>
> 実際にこっちでもコードを書いてみて実行(VWD2008)してみたら、
> CommandNameを"Sort"(大文字小文字関係なし)に設定すると、RowCommandではなく、Sortingイベントが実行されるようです。
> また、その際にCommandArgumentに設定したものは、Sortingイベントの引数eのSortExpressionプロパティに
> 渡されるようです。つまり、1列目のSortExpressionを設定したのとほぼ同じ動作となりました。

返信遅くなりまして申し訳ございません。

私の環境では、1列目を押下したときは、「RowCommandイベント→Sortingイベント」の順で
動作いたします。RowCommandイベントを通る時点で間違っているのかもしれないです。
もう少し、調べてみます。お手数おかけしました。
引用返信 編集キー/
■41365 / inTopicNo.5)  Re[3]: GridViewで複数ヘッダー表示した際のソート処理
□投稿者/ 新人 (20回)-(2009/09/18(Fri) 14:36:07)
No41267 (もりお さん) に返信
> 目先を変えてヘッダーテンプレートに LinkButton を2つ配置
> するのはいかがでしょうか。
>
> <asp:TemplateField HeaderText="name" SortExpression="name">
> ...
> <HeaderTemplate>
> <asp:LinkButton ID="LinkButtonName" runat="server" CommandArgument="name"
> CommandName="Sort">NAME</asp:LinkButton>
> <br />
> <asp:LinkButton ID="LinkButtonAge" runat="server" CommandArgument="age"
> CommandName="Sort">AGE</asp:LinkButton>
> </HeaderTemplate>
> ...
> </asp:TemplateField>
>

返信遅くなりまして申し訳ございません。
ヘッダーテンプレートも検討いたしましたが、
--------------------------------------------
|ヘッダー1|ヘッダー2|ヘッダー3|ヘッダー4|
--------------------------------------------
|ヘッダー5|ヘッダー6|ヘッダー7|ヘッダー8|
--------------------------------------------
|ヘッダー9|ヘッダー10          |
--------------------------------------------
|明細1  |明細2  |明細3  |明細4  |
--------------------------------------------
|明細5  |明細6  |明細7  |明細8  |
--------------------------------------------
|明細9  |明細10            |
--------------------------------------------
このようなレイアウトも存在するするのですが、
ヘッダーテンプレートでは対応できないという結論になりました。

もう少し、調べてみます。お手数おかけしました。

引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -