none
ASP.NETのGridViewのImageField列のクリックイベントを取得したい RRS feed

  • 質問

  • GridViewの列にHyperLinkFieldと同等の振る舞いをし、

    見た目はGIFファイルを表示しようとしています。

     

    イメージ的にはGridViewの中に、行のデータによってアイコンが

    表示されたり、表示されなかったり変化し、表示している場合に

    クリックすると別画面に遷移するようなイメージです。

     

    ImageField列にはNavigateUrlやクリックイベントを取得する方法が

    見当たらなかったので、現状は以下の方法で実装しています。

     

    1) 列はHyperLinkFieldにする。

    2) 表示したいときだけ適当な長さの邪魔にならない文字列[....]などを返すデータ列にバインドする。

        (表示したくない場合は、null)

    3) HyperLinkFieldのCssClassでbackground-imageでGIFを指定。

     

    <asp:HyperLinkField DataTextField="xxx" HeaderText="xxx" NavigateUrl="~/xxx.aspx"
         SortExpression="xxx" >
    <ControlStyle CssClass="CssUpdate" />
                                          ~~~~~~~~~

    <ItemStyle ForeColor="White" HorizontalAlign="Center" />
    </asp:HyperLinkField>

     

    A.CssUpdate
    {
     background-image: url(icons/update.gif);
     background-repeat: repeat-y;
     text-decoration:none;
     height:24;
    }

    と、なんとか回避しているのですが、もっとスマートな方法は無いでしょうか?

    2007年9月27日 7:02

回答

  • 以下に例があります。

     

    ImageButton in gridview
    http://forums.asp.net/p/1110689/1709784.aspx#1709784

     

    GIFの表示制御は、上記と同じようにしてVisibleを制御すればできると思います。

    2007年9月28日 0:46
    モデレータ
  • 大変遅くなりましたが、できました。

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

     

    何人かの方が参照してくれたようなので、実装結果のソースを

    念のために乗せておきます。

     

            <Columns>
                <asp:BoundField DataField="ID" HeaderText="ID" SortExpression="ID" />
                                                        ・

                                                        ・

                <asp:TemplateField HeaderText="更新" SortExpression="更新">
                    <ItemStyle HorizontalAlign="Center" />
                    <ItemTemplate>
                        &nbsp;<asp:ImageButton ID="ImageButton1" runat="server" ImageUrl="~/icons/update.gif"
                            OnClick="ImageButton1_Click" Visible='<%# Eval("更新") %>' />
                    </ItemTemplate>
                </asp:TemplateField>
            </Columns>


     

    "更新"がsqlDataSourceで取得した列です。

    ImageButtonを表示したい時に「1」、表示したくない時に「0」を

    返すようにしました。

    2007年10月17日 23:41

すべての返信

  • ImageButtonを代わりに使えないでしょうか?

    2007年9月27日 11:35
    モデレータ
  • レスありがとうございます。

     

    GridViewの列でImageButtonを使えるのでしょうか?

    GridViewクラスをOverrideすれば出来る気もするんですが・・・

    もし、実装された経験がある方がいましたらご教授願います。

     

    ちなみにButtonFieldを利用した場合はGIFの表示は可能なのですが、

    条件に応じてGIFを表示したり、表示しなかったりするの

    条件が満たせませんでした。

     

    もう少し具体的にやりたいことを書きますと、色々とステータスの

    存在するデータをGridViewに表示し、ステータスに応じて「更新ボタン(GIF)」の

    表示の有無を切り替えたいんです。

    2007年9月27日 22:19
  • 以下に例があります。

     

    ImageButton in gridview
    http://forums.asp.net/p/1110689/1709784.aspx#1709784

     

    GIFの表示制御は、上記と同じようにしてVisibleを制御すればできると思います。

    2007年9月28日 0:46
    モデレータ
  • ありがとうございます。助かります。

     

    今すぐは評価できないので、後日、実装結果をアップさせていただきます。

    2007年9月28日 4:09
  • 大変遅くなりましたが、できました。

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

     

    何人かの方が参照してくれたようなので、実装結果のソースを

    念のために乗せておきます。

     

            <Columns>
                <asp:BoundField DataField="ID" HeaderText="ID" SortExpression="ID" />
                                                        ・

                                                        ・

                <asp:TemplateField HeaderText="更新" SortExpression="更新">
                    <ItemStyle HorizontalAlign="Center" />
                    <ItemTemplate>
                        &nbsp;<asp:ImageButton ID="ImageButton1" runat="server" ImageUrl="~/icons/update.gif"
                            OnClick="ImageButton1_Click" Visible='<%# Eval("更新") %>' />
                    </ItemTemplate>
                </asp:TemplateField>
            </Columns>


     

    "更新"がsqlDataSourceで取得した列です。

    ImageButtonを表示したい時に「1」、表示したくない時に「0」を

    返すようにしました。

    2007年10月17日 23:41
  • trapemiya さん

     

    trapemiya さんから頂いた回答が大変参考になりました。

    まだ評価システムが良くわかっていなかったのですが、

    お世話になった事に改めて御礼を言わせてください。

     

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



     

    2007年12月19日 9:38