none
ネストされたGirdViewでSelectedIndexChangedイベントが発生しない RRS feed

  • 質問

  • GirdView1にGirdView2を階層化して表示させて、GirdView2の選択ボタン(CommandField)で選択しても、GirdView2のSelectedIndexChangedイベントが発生しません。

    やりたいことは、選択したデータをFormViewページにジャンプし、その詳細表示や編集を行いたいのです。

    カテゴリ   タイトル        更新日付       更新者
    -----------------------------------------------------------------------
    ああああ   いいいいい      2010/04/01     うううううう
             えええええ     2010/04/02      おおおお  ←─ 選択
             かかかか       2010/04/02     ききききき
    -----------------------------------------------------------------------
    くくくくく     けけけけけけ    2010/04/03     こここここ
             ささささ        2010/04/04     ししししし

    階層化したGridViewの場合、SelectValue、RowIndexなどのプロパティはどのように取得すればいいのでしょうか?

                    <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False"
                        CellPadding="4" DataSourceID="SqlDataSource1" ForeColor="#333333"
                        GridLines="None">
                        <RowStyle BackColor="#F7F6F3" ForeColor="#333333" />
                        <Columns>
                            <asp:TemplateField HeaderText="カテゴリ" SortExpression="CategoryName">
                                <ItemTemplate>
                                    <asp:Label ID="Label1" runat="server" Text='<%# Bind("CategoryName") %>'></asp:Label>
                                </ItemTemplate>
                                <EditItemTemplate>
                                    <asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("CategoryName") %>'></asp:TextBox>
                                </EditItemTemplate>
                            </asp:TemplateField>
                            <asp:TemplateField>
                                <ItemTemplate>
                                    <asp:HiddenField ID="HiddenField1" runat="server"
                                        Value='<%# Eval("Category") %>' />
                                    <asp:GridView ID="GridView2" runat="server" AutoGenerateColumns="False"
                                        CellPadding="4" DataSourceID="SqlDataSource2" ForeColor="#333333"
                                        GridLines="None" Width="700px" AllowSorting="True" DataKeyNames="ID">
                                        <RowStyle BackColor="#F7F6F3" ForeColor="#333333" />
                                        <Columns>
                                            <asp:BoundField DataField="ID" HeaderText="ID" />
                                            <asp:CommandField ShowSelectButton="True" />
                                            <asp:BoundField DataField="DocName" HeaderText="タイトル"
                                                SortExpression="DocName" />
                                            <asp:BoundField DataField="UpdateDate" HeaderText="更新日付"
                                                SortExpression="UpdateDate" DataFormatString="{0:d}" />
                                            <asp:BoundField DataField="Owner" HeaderText="更新者" SortExpression="Owner" />
                                        </Columns>
                                        <FooterStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
                                        <PagerStyle BackColor="#284775" ForeColor="White" HorizontalAlign="Center" />
                                        <SelectedRowStyle BackColor="#E2DED6" Font-Bold="True" ForeColor="#333333" />
                                        <HeaderStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
                                        <EditRowStyle BackColor="#999999" />
                                        <AlternatingRowStyle BackColor="White" ForeColor="#284775" />
                                    </asp:GridView>
                                    <asp:SqlDataSource ID="SqlDataSource2" runat="server"
                                        ConnectionString="<%$ ConnectionStrings:DBConnectionString %>"
                                       
                                        SelectCommand="SELECT DocName, UpdateDate, Owner, ID FROM T_Doc WHERE (Category = @Category)">
                                        <SelectParameters>
                                            <asp:ControlParameter ControlID="HiddenField1" Name="Category"
                                                PropertyName="Value" Type="Int32" />
                                        </SelectParameters>
                                    </asp:SqlDataSource>
                                </ItemTemplate>
                            </asp:TemplateField>
                        </Columns>
                        <FooterStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
                        <PagerStyle BackColor="#284775" ForeColor="White" HorizontalAlign="Center" />
                        <SelectedRowStyle BackColor="#E2DED6" Font-Bold="True" ForeColor="#333333" />
                        <HeaderStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
                        <EditRowStyle BackColor="#999999" />
                        <AlternatingRowStyle BackColor="White" ForeColor="#284775" />
                    </asp:GridView>

     

    2010年11月3日 7:30

回答

  • DB のテーブルのスキーマや、アップされたコードがよく分かりませんのでハズレ
    かもしれませんが・・・

    > やりたいことは、選択したデータをFormViewページにジャンプし、その詳細表
    > 示や編集を行いたいのです。

    GridView 上に配置された Button クリックで、あるテーブルのレコードを選択し、
    別ベージに遷移してそのレコードを FormView に表示したいということなら、そ
    の Button の CommandArgument プロパティに当該レコードの主キーを設定し、
    GridView.RowCommand イベントのハンドラで処置してはいかがですか?


    なお、コードをアップするなら、問題とは関係ない余計な部分(今回のケースで
    はスタイルの指定)は削除して、必要な最小限に絞っていただけないでしょうか?

    #余計なものが入っていると、正直言って読む気がしなくなります。

    • 回答としてマーク 山本春海 2010年11月29日 4:34
    2010年11月3日 9:25
  • 以下にまとまっていますので、参考になるかもです。

    [ASP.NET]GridViewコントロールにコマンド・ボタンを配置するには?(応用編)[2.0、3.0、3.5、C#、VB]
    http://www.atmarkit.co.jp/fdotnet/dotnettips/830aspgridvwcmdbtn2/aspgridvwcmdbtn2.html

     


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/
    • 回答としてマーク 山本春海 2010年11月29日 4:34
    2010年11月3日 15:41
    モデレータ

すべての返信

  • DB のテーブルのスキーマや、アップされたコードがよく分かりませんのでハズレ
    かもしれませんが・・・

    > やりたいことは、選択したデータをFormViewページにジャンプし、その詳細表
    > 示や編集を行いたいのです。

    GridView 上に配置された Button クリックで、あるテーブルのレコードを選択し、
    別ベージに遷移してそのレコードを FormView に表示したいということなら、そ
    の Button の CommandArgument プロパティに当該レコードの主キーを設定し、
    GridView.RowCommand イベントのハンドラで処置してはいかがですか?


    なお、コードをアップするなら、問題とは関係ない余計な部分(今回のケースで
    はスタイルの指定)は削除して、必要な最小限に絞っていただけないでしょうか?

    #余計なものが入っていると、正直言って読む気がしなくなります。

    • 回答としてマーク 山本春海 2010年11月29日 4:34
    2010年11月3日 9:25
  • SurferOnWwwさん、早々の回答ありがとうございます。

    教えていただいた内容を確認したのですが、ASP.NETの基本的なことを習得できてないため、
    理解できませんでした。

    > CommandArgument プロパティに当該レコードの主キーを設定し、
    > GridView.RowCommand イベントのハンドラで処置してはいかがですか?

    GridViewの右上のGridViewタスクの「選択を有効にする」をチェックして
    CommandFieldを使っていますが、これでもできるのでしょうか?
    できましたら、具体的に教えてしていただけないでしょうか?

    また、vbページのクラスのドロップダウンリストには、GridView2(つまり、ネストされたGridView)が
    表示されず、GridView.RowCommand イベントが作成できません。
    (GridView1、SqlDataSource1しか表示されない)
    手書きでGridView2_RowCommandを記述し、ブレイクポイントを設定しても、
    ブレイクポイントで停止しません。

    ご無理を申しますが、よろしくお願い致します。

    > #余計なものが入っていると、正直言って読む気がしなくなります。

    初めての投稿で申し訳ありませんでした。
    ご指摘いただき、有り難うございます。

     

    2010年11月3日 11:13
  • 自己レスです。

    いろいろ試した結果、e.CommandArgumentで値が取得できるようになりました。
    ただし、主キーの値までは取得できていません。

    でも、なんとか解決しそうな感じでする。

    プロパティ・ウィンドウをイベント表示に切り替え、RowCommandの欄を
    ダブルクリックすると、GridView2_RowCommandイベントプロシジャーが
    作成できました。
    また、GridView2内の選択ボタンをクリックすると、GridView2_RowCommandの
    ブレイクポイントで停止することもできました。

    自力で頑張ってみます。

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

    2010年11月3日 12:26
  • > でも、なんとか解決しそうな感じでする。

    それは何よりです。

    不明な点がありましたらまた質問してください。

    Button の CommandArgument プロパティの設定は、GridView.RowDataBound
    イベントがいいかもしれません。

    2010年11月3日 14:59
  • 以下にまとまっていますので、参考になるかもです。

    [ASP.NET]GridViewコントロールにコマンド・ボタンを配置するには?(応用編)[2.0、3.0、3.5、C#、VB]
    http://www.atmarkit.co.jp/fdotnet/dotnettips/830aspgridvwcmdbtn2/aspgridvwcmdbtn2.html

     


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/
    • 回答としてマーク 山本春海 2010年11月29日 4:34
    2010年11月3日 15:41
    モデレータ