トップ回答者
ネストされたGirdViewでSelectedIndexChangedイベントが発生しない

質問
-
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>
回答
-
DB のテーブルのスキーマや、アップされたコードがよく分かりませんのでハズレ
かもしれませんが・・・> やりたいことは、選択したデータをFormViewページにジャンプし、その詳細表
> 示や編集を行いたいのです。GridView 上に配置された Button クリックで、あるテーブルのレコードを選択し、
別ベージに遷移してそのレコードを FormView に表示したいということなら、そ
の Button の CommandArgument プロパティに当該レコードの主キーを設定し、
GridView.RowCommand イベントのハンドラで処置してはいかがですか?
なお、コードをアップするなら、問題とは関係ない余計な部分(今回のケースで
はスタイルの指定)は削除して、必要な最小限に絞っていただけないでしょうか?#余計なものが入っていると、正直言って読む気がしなくなります。
- 回答としてマーク 山本春海 2010年11月29日 4:34
-
以下にまとまっていますので、参考になるかもです。
[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
すべての返信
-
DB のテーブルのスキーマや、アップされたコードがよく分かりませんのでハズレ
かもしれませんが・・・> やりたいことは、選択したデータをFormViewページにジャンプし、その詳細表
> 示や編集を行いたいのです。GridView 上に配置された Button クリックで、あるテーブルのレコードを選択し、
別ベージに遷移してそのレコードを FormView に表示したいということなら、そ
の Button の CommandArgument プロパティに当該レコードの主キーを設定し、
GridView.RowCommand イベントのハンドラで処置してはいかがですか?
なお、コードをアップするなら、問題とは関係ない余計な部分(今回のケースで
はスタイルの指定)は削除して、必要な最小限に絞っていただけないでしょうか?#余計なものが入っていると、正直言って読む気がしなくなります。
- 回答としてマーク 山本春海 2010年11月29日 4:34
-
SurferOnWwwさん、早々の回答ありがとうございます。
教えていただいた内容を確認したのですが、ASP.NETの基本的なことを習得できてないため、
理解できませんでした。> CommandArgument プロパティに当該レコードの主キーを設定し、
> GridView.RowCommand イベントのハンドラで処置してはいかがですか?
GridViewの右上のGridViewタスクの「選択を有効にする」をチェックして
CommandFieldを使っていますが、これでもできるのでしょうか?
できましたら、具体的に教えてしていただけないでしょうか?
また、vbページのクラスのドロップダウンリストには、GridView2(つまり、ネストされたGridView)が
表示されず、GridView.RowCommand イベントが作成できません。
(GridView1、SqlDataSource1しか表示されない)
手書きでGridView2_RowCommandを記述し、ブレイクポイントを設定しても、
ブレイクポイントで停止しません。
ご無理を申しますが、よろしくお願い致します。> #余計なものが入っていると、正直言って読む気がしなくなります。
初めての投稿で申し訳ありませんでした。
ご指摘いただき、有り難うございます。 -
自己レスです。
いろいろ試した結果、e.CommandArgumentで値が取得できるようになりました。
ただし、主キーの値までは取得できていません。でも、なんとか解決しそうな感じでする。
プロパティ・ウィンドウをイベント表示に切り替え、RowCommandの欄を
ダブルクリックすると、GridView2_RowCommandイベントプロシジャーが
作成できました。
また、GridView2内の選択ボタンをクリックすると、GridView2_RowCommandの
ブレイクポイントで停止することもできました。自力で頑張ってみます。
ありがとうございました。
-
以下にまとまっていますので、参考になるかもです。
[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