Shizuku Blog ~ techbank.jp版~

~女性エンジニア けろ-みおの苦悩~

ログイン | ID登録 | ヘルプ


ニュース


当Blogにについて

当Blogは、けろ-みおが備忘録として活用しているBlogになります。掲載している内容について、必ずしも正しい情報を公開しているわけではありませんので予めご了承下さい。
当Blogで公開している記事に対して、質問がある場合は、techbank.jp掲示板でお問い合わせ頂くか、techbank.jp ID申請を行い、IDを作成した段階で当Blogにコメントする等してください。
原則、正体がわからない方からのBlogコメント欄を使ったご質問・ご指摘は、承っておりません。
コメント投稿・公開(承認)基準につきましては、 当Blogのコメント投稿についてをご確認ください。
テクニカルコミュニティ(techbank.jp)に設置しているBlogということもあり、皆様のご理解とご協力の程、宜しくお願いします。

自己紹介

けろ-みおと申します。「techbank.jp」の副管理人をやっております。

MVP Profile

0







けろ-みおの関連サイト





このBlogの人気度
フィードメーター - techbank.jpコミュニティ

techbank.jp Blog全体と近いBlog
あわせて読みたいブログパーツ

このBlogと近いBlog
あわせて読みたいブログパーツ

Blog購読者数
スカウター : techbank.jp







[ASP.NET] : (今回はVB専用): GridView&選択ボタンなしで、行を選択する方法

 

※この記事はかつて、わんくまBlogで書いていたものです。こちらに移行します

 

某コミュニティで、

・ASP.NET  ・VB専用 ・GridView ・選択リンクなし ・行を選択できる方法

とあったので、サンプルを作ってみた。

 

ま、これぐらいなら、誰でも簡単にできるが、意外にもはまる人が多いので、初心者向けにサンプルを掲載しておきます。

ポイントは、JavaScriptのお力をお借りすることと、RowCreatedイベントの使い方ですね。

 

なお、実行サンプルは、 

    http://techbank.jp/NonSelectButton/

でお試し頂けます。

 

 

■Default.aspx

<%@ Page Language="VB" AutoEventWireup="true" CodeFile="Default.aspx.vb" Inherits="_Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head runat="server">

    <title>Untitled Page</title>

    <script type="text/javascript" language="javascript">

    function SelectedRow(rowNum, gridViewId)
    {
        __doPostBack(gridViewId, 'Select$' + rowNum);        

    }

    </script>

</head>


<body>

    <form id="form1" runat="server">


    <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" 
        DataKeyNames="CategoryId" DataSourceID="SqlDataSource1" CellPadding="4" 
        ForeColor="#333333" GridLines="None">

        <footerstyle backcolor="#507CD1" font-bold="True" forecolor="White" />

        <rowstyle backcolor="#EFF3FB" />

        <Columns>

            <asp:commandfield ShowSelectButton="True"></asp:commandfield>

            <asp:templatefield HeaderText="Col1">

                <itemtemplate>

                    <asp:Label ID="Category" runat="server" Text='<%# Eval("CategoryId") %>'></asp:Label>

                </itemtemplate>

            </asp:templatefield>

            <asp:templatefield HeaderText="Col2">

                <itemtemplate>

                    <asp:Label ID="CategoryName" runat="server" Text='<%# Eval("CategoryName") %>'></asp:Label>

                </itemtemplate>

            </asp:templatefield>

        </Columns>

        <pagerstyle backcolor="#2461BF" forecolor="White" horizontalalign="Center" />
        <selectedrowstyle backcolor="#D1DDF1" font-bold="True" forecolor="#333333" />
        <headerstyle backcolor="#507CD1" font-bold="True" forecolor="White" />
        <editrowstyle backcolor="#2461BF" />
        <alternatingrowstyle backcolor="White" />

    </asp:GridView>


    <asp:SqlDataSource ID="SqlDataSource1" runat="server" 
        ConnectionString="<%$ ConnectionStrings:PublicSampleConnectionString %>" 
        SelectCommand="SELECT [CategoryId], [CategoryName] FROM [Category]">
    </asp:SqlDataSource>

    </form>

</body>

</html>

 

■Default.aspx.vb (VBの例ですが、C#でも考え方は同じです)

Partial Class _Default
    Inherits System.Web.UI.Page

    Protected Sub GridView1_RowCreated(ByVal sender As Object, _
                                       ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) _
                                       Handles GridView1.RowCreated

        ' 選択ボタンセルを非表示にする(Visible = False だと選択ボタン押下を裏で制御ができないため)
        e.Row.Cells(0).Style.Add("display", "none")

        ' データ行ではない場合は、何もしない
        If Not e.Row.RowType = DataControlRowType.DataRow Then

            Exit Sub

        End If


        ' 行をClickされた場合、JavaScriptを実行するよう設定する
        Dim clickEvent As String = _
            String.Format("SelectedRow('{0}', '{1}')", _
                                    e.Row.RowIndex, _
                                    Me.GridView1.ClientID)

        e.Row.Attributes.Add("onClick", clickEvent)

        ' 行のカーソルを手のマークにする
        e.Row.Style.Add("cursor", "hand")

    End Sub


    Protected Sub GridView1_SelectedIndexChanging(ByVal sender As Object, _
                                                  ByVal e As System.Web.UI.WebControls.GridViewSelectEventArgs) _
                                                  Handles GridView1.SelectedIndexChanging

        ' 行が選択された時の処理を書く

    End Sub


    Protected Sub GridView1_PageIndexChanged(ByVal sender As Object, _
                                             ByVal e As System.EventArgs) _
                                             Handles GridView1.PageIndexChanged

        ' 行が選択された後の処理を書く

    End Sub

End Class

 

ポイントは、JavaScriptの__doPostBack に何を渡すか?です。

そして、最低限、選択した行の行番号が__doPostBackには欲しいはずなので、GridViewのRowCreatedイベントを使って、

__doPostBackの引数を生成してしまいます。(そうするとRowCrreatedイベントで行番号が取得できるので・・・)

 

結構、このネタ、参照している方が非常に多かったので、今後もtechbank.jpの方で掲載しておきます。

ご参考までに。

Published 2008年4月14日 0:15 けろ-みお

コメント

このBlogに対するコメントはありません

コメントを残す

(必須) 
(必須) 
(オプション)
(必須)