トップ回答者
複数のDropDownListを相互連動させたい

質問
-
初心者です(VS205、VB、SQLserver2008R2)
フォーム上に SqlDataSource1と連動したDropDownList1 と
SqlDataSource2 と連動したDropDownList2 があり
DropDownList1で選択した値をSqlDataSource2でWhere条件としています。
DropDownList1にメンバを「全選択」 Value値を0として
DropDownList2のリストをすべて表示させたいのですが、方法がわかりません。
更に、上記の設定を行った際に DropDownList1を選択する度に
DropDownList2のデータリストが行った選択分増えてしまいます。
実際の例が難しくなりすぎてソースコードが添付できないのですが
行いたいことは以下のようになります。
DropDownList1 : 地域コード と 地域名称
DropDownList2 : 店舗コード と 店舗名称 と 地域コード
例えば
1.画面を最初に表示した際、DropDownList1に全選択が表示され
DropDownList2 全店舗が選択可能にしたい。
2.DropDownList2で任意の店舗を選択した場合に
DropDownList1の地域がDropDownList2の地域コードと同じ
地域に選択される。
3.最後に現在の異常事態ですが
DropDownList1で地域を選択すると
DropDownList2の内容が正しく地域限定の店舗が表示されるのですが
DropDownList1から異なる地域を再選択すると、DropDownList2の内容が
追加表示されてしまいます。
以上ですが、よろしくお願いいたします。
回答
-
> DropDownList1から異なる地域を再選択すると、DropDownList2の内容が
> 追加表示されてしまいます何故そうなるのか分かりませんが、以下のようにすればそのようなことは
ありません。データベースは Microsoft のサンプル Northwind の Categories テーブ
ル(地域コード と 地域名称 相当)と Products テーブル(店舗コード
と 店舗名称 相当)を使用しています。<%@ Page Language="C#" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <script runat="server"> </script> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title></title> </head> <body> <form id="form1" runat="server"> <div> <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:Northwind %>" SelectCommand="SELECT [CategoryID], [CategoryName] FROM [Categories]"> </asp:SqlDataSource> <asp:DropDownList ID="DropDownList1" runat="server" DataSourceID="SqlDataSource1" DataTextField="CategoryName" DataValueField="CategoryID" AutoPostBack="True" AppendDataBoundItems="True"> <asp:ListItem Value="0">全選択</asp:ListItem> </asp:DropDownList> <br /> <asp:SqlDataSource ID="SqlDataSource2" runat="server" ConnectionString="<%$ ConnectionStrings:Northwind %>" SelectCommand="SELECT [ProductID], [ProductName] FROM [Products] WHERE (@CategoryID = 0 OR [CategoryID] = @CategoryID)"> <SelectParameters> <asp:ControlParameter ControlID="DropDownList1" Name="CategoryID" PropertyName="SelectedValue" Type="Int32" /> </SelectParameters> </asp:SqlDataSource> <asp:DropDownList ID="DropDownList2" runat="server" DataSourceID="SqlDataSource2" DataTextField="ProductName" DataValueField="ProductID"> </asp:DropDownList> </div> </form> </body> </html>
- 回答としてマーク pythonk 2012年5月14日 14:08
-
すべての返信
-
> DropDownList1から異なる地域を再選択すると、DropDownList2の内容が
> 追加表示されてしまいます何故そうなるのか分かりませんが、以下のようにすればそのようなことは
ありません。データベースは Microsoft のサンプル Northwind の Categories テーブ
ル(地域コード と 地域名称 相当)と Products テーブル(店舗コード
と 店舗名称 相当)を使用しています。<%@ Page Language="C#" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <script runat="server"> </script> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title></title> </head> <body> <form id="form1" runat="server"> <div> <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:Northwind %>" SelectCommand="SELECT [CategoryID], [CategoryName] FROM [Categories]"> </asp:SqlDataSource> <asp:DropDownList ID="DropDownList1" runat="server" DataSourceID="SqlDataSource1" DataTextField="CategoryName" DataValueField="CategoryID" AutoPostBack="True" AppendDataBoundItems="True"> <asp:ListItem Value="0">全選択</asp:ListItem> </asp:DropDownList> <br /> <asp:SqlDataSource ID="SqlDataSource2" runat="server" ConnectionString="<%$ ConnectionStrings:Northwind %>" SelectCommand="SELECT [ProductID], [ProductName] FROM [Products] WHERE (@CategoryID = 0 OR [CategoryID] = @CategoryID)"> <SelectParameters> <asp:ControlParameter ControlID="DropDownList1" Name="CategoryID" PropertyName="SelectedValue" Type="Int32" /> </SelectParameters> </asp:SqlDataSource> <asp:DropDownList ID="DropDownList2" runat="server" DataSourceID="SqlDataSource2" DataTextField="ProductName" DataValueField="ProductID"> </asp:DropDownList> </div> </form> </body> </html>
- 回答としてマーク pythonk 2012年5月14日 14:08
-
-
aviator__ さん>
> 現象だけを聞くと、DataTableをクリアせずにひたすらDataRowをAddし
> ているかと・・・SqlDataSource + DropDownList ということなので、ASP.NET ベースの Web
アプリの話、つまりステートレス(サーバーが応答を返した後は DataTable
のインスタンスは存在しない)なので、特別なことをしない限り、それはで
きないはずです。特別なこととは、例えば、DataTable を Session に保持して、DataAdapter
で Fill するというようなことですが、そのようなことをしているのでしょ
うか?> pythonk さん