none
GridViewのページャーについて RRS feed

  • 質問

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

    GridViewでページャーを表示しています。

    現在表示されているページにはリンクが張られておらず、
    他のページにはリンクが張られています。

    このリンクが張られていないページを目立たせて、
    現在表示されているページを分かりやすく表示したいのですが、
    GridViewのプロパティで、ページャーを設定すると、
    全てのページ番号に反映されてしまいます。

    現在表示中のページのみ拡大表示をする方法は、ありませんでしょうか。

    ご存知の方がおられたら教えてください。
    よろしくお願いします。

    2006年11月13日 8:04

回答

  • ちょっと無理やりな気もしますがGridViewのRowDataBoundイベントの中に以下のよな感じで記述してみるとか。

            if (e.Row.RowType == DataControlRowType.Pager)
            {
                foreach(Control wc in e.Row.Cells[0].Controls[0].Controls[0].Controls)
                {
                    Label tempPage = wc.Controls[0] as Label;
                    if (tempPage != null)
                    {
                        tempPage.Style.Add(HtmlTextWriterStyle.FontSize, "xx-large");
                    } 
                }
            }

    2006年11月13日 9:15
  •  Hidegi さんからの引用

            If Not String.IsNullOrEmpty(pageNo.Text) Then

    String.IsNullOrEmpty ではなくて IsNothing(pageNo) とすると良いかな。

    Try-Catch を足されているのも、おそらくこの部分のミスで NullReferenceException が発生しているからですよね。

     

    2006年11月16日 7:15

すべての返信

  • ちょっと無理やりな気もしますがGridViewのRowDataBoundイベントの中に以下のよな感じで記述してみるとか。

            if (e.Row.RowType == DataControlRowType.Pager)
            {
                foreach(Control wc in e.Row.Cells[0].Controls[0].Controls[0].Controls)
                {
                    Label tempPage = wc.Controls[0] as Label;
                    if (tempPage != null)
                    {
                        tempPage.Style.Add(HtmlTextWriterStyle.FontSize, "xx-large");
                    } 
                }
            }

    2006年11月13日 9:15
  • ご返信ありがとうございます。
    目的を達成することができました。

    VBに移植して実行しています。

    If Not e.Row.RowType = DataControlRowType.Pager Then
        Exit Sub
    End If

    Dim wc As Control

    For Each wc In e.Row.Cells(0).Controls(0).Controls(0).Controls

        Try
            Dim pageNo As Label = wc.Controls(0)
            If Not String.IsNullOrEmpty(pageNo.Text) Then
                pageNo.Style.Add(HtmlTextWriterStyle.FontSize, "xx-large")
            End If
        Catch ex As Exception

        End Try

    Next

     

    2006年11月16日 3:07
  •  Hidegi さんからの引用

            If Not String.IsNullOrEmpty(pageNo.Text) Then

    String.IsNullOrEmpty ではなくて IsNothing(pageNo) とすると良いかな。

    Try-Catch を足されているのも、おそらくこの部分のミスで NullReferenceException が発生しているからですよね。

     

    2006年11月16日 7:15
  • 補足ありがとうございます。

    オブジェクトがNULLか否かを判定するには、
    ISNOTHINGを使用すればよいのですね。
    勉強になりました。

    ただ、TRY-CATCHは、Labelオブジェクトに格納するとき、
    LabelではなくLinkButtonが格納される場合に例外が発生するので、
    記述しています。
    (表示中のページ数がLabelオブジェクトで、他ページがLinkButtonでした)

    スマートではないと思うのですが、他に手段が思いつきませんでした。^^;

     

    2006年11月20日 5:10
  • > ただ、TRY-CATCHは、Labelオブジェクトに格納するとき、
    > LabelではなくLinkButtonが格納される場合に例外が発生するので、
    > 記述しています。

    C#で書いたほうのプログラムだと、表示中のページ数の場所かどうかをLabel型かどうかで判別する、というプログラムになっています。
    VBで、とりだしたオブジェクトが特定の型かどうかの比較ができれば同じように処理を記述できると思います。

    #VBで型の判別ができるかどうかがよくわからない。。。

    2006年11月20日 5:50
  • VBでは、TypeName( Object )で、オブジェクトがLabelかどうか判断できると思いますが、

    試してみられてはいかがでしょうか?

     

    2006年11月21日 10:03

  • 返信ありがとうございます。
    おっしゃるとおり、TypeName(Object)で、"Label"という
    文字列を取得することができました。

    このLabelという文字列を、固定値として持っている
    .Net Frameworkはないのでしょうか。

    "Label"という文字列を、自前で定義して
    比較するよりも、提供される固定文字列と比較した方が、
    一般的だと思うのです。

    ご存知の型がおられましたら教えてください。
    よろしくお願いします。

    2006年12月12日 23:44
  •  Hidegi さんからの引用

    このLabelという文字列を、固定値として持っている
    .Net Frameworkはないのでしょうか。

    TypeOfを使えばいいんじゃないでしょうか? 処理もTypeNameに比べて高速のようです。

    オブジェクトの型の決定
    http://msdn2.microsoft.com/ja-jp/library/s4zz68xc(VS.80).aspx

    2006年12月13日 2:20
    モデレータ