- - PR -
2つのDropDownListを連動し、更にFormViewで修正する
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2009-03-29 16:29
いつもお世話になります。
ASP.NET 2.0 C# Windows2000 と WindowsXP Mirrosoft SQL 2005 Express Edition 上記の環境で開発しています。 今やりたいのは、2つのDropDownListのデータベースから読み込み連動し、 更にFormViewで修正しても、同様に連動したいのです。 データベースは、 <KoushuMaster> 工種ID|工種名 −−−−−−−−− 1 |工種A 2 |工種B 3 |工種C <HinmokuMaster> 品目ID |品目名 −−−−−−−−− 1 |品目A 2 |品目B 3 |品目C 連動(絞込)させるためのデータベース <KHMaster> 工種ID |品目ID −−−−−−−−− 1 |1 1 |2 2 |1 2 |3 3 |1 3 |2 3 |3 1つ目のDropDownList(Koushu)を選択したら、 2つ目のDropDownList(Hinmoku)が連動(絞込)するようにしたいため、 下記のように、FormViewのInsertItemTemplateに記述しました。 ==========FormViewのInsertItemTemplateここから========= <asp:SqlDataSource ID="sds_koushu" runat="server" ConnectionString="<%$ ・・・・・・ %>" ProviderName="<%$ ・・・・・・ %>" SelectCommand="select [工種ID],[工種名] from dbo.KoushuMaster /> <asp:DropDownList ID="Koushu" runat="server" DataSourceID="sds_koushu" AutoPostBack="True" DataValueField="工種ID" DataTextField="工種名" /> <asp:SqlDataSource ID="sds_kh" runat="server" ConnectionString="<%$ ・・・・・・ %>" ProviderName="<%$ ・・・・・・ %>" SelectCommand="select K.[品目ID],H.[品目名] from dbo.KHMaster as K left join dbo.HinmokuMaster as H on K.[品目ID]=H.[品目ID] WHERE (K.[工種ID] = @KoushuID)"> <SelectParameters> <asp:ControlParameter ControlID="Koushu" Name="KoushuID" PropertyName="SelectedValue" /> </SelectParameters> </asp:SqlDataSource> <asp:DropDownList ID="Hinmoku" runat="server" DataSourceID="sds_kh" AutoPostBack="True" DataValueField="品目ID" DataTextField="品目名" /> ==========FormViewのInsertItemTemplateここまで========= InsertItemTemplateでは、これでうまく連動(絞込)しています。 ところが、EditItemTemplateではDataBoundを利用し、 修正内容を読み込むためのSelectValueを下記のように追加すると、 正しく読み込みますが、一つ目のDropDownList(Koushu)を変更しようとすると、 SelectValueが邪魔するのか、 「Eval()、XPath()、および Bind() のようなデータバインド メソッドは、データバインドされたコントロールのコンテキストでのみ使用することができます。」 となり、連動(絞込)処理が出来ません。 ==========FormViewのEditItemTemplateここから========= <asp:SqlDataSource ・・・・・・・・・・ /> <asp:DropDownList ID="Koushu" runat="server" DataSourceID="sds_koushu" AutoPostBack="True" DataValueField="工種ID" DataTextField="工種名" SelectedValue='<%# Bind("工種ID") %>' /> <asp:SqlDataSource ・・・・・・・・・・ /> <asp:DropDownList ID="Hinmoku" runat="server" DataSourceID="sds_kh" AutoPostBack="True" DataValueField="品目ID" DataTextField="品目名" SelectedValue='<%# Bind("品目ID") %>' /> ==========FormViewのEditItemTemplateここまで========= どうやって修正したら良いか、ご伝授下さい。 よろしくお願い致します。 [ メッセージ編集済み 編集者: みかりん☆ミ 編集日時 2009-04-01 12:44 ] | ||||
|
投稿日時: 2009-03-29 22:39
FormView自体のデータソースがわからないんでなんともいえませんが、最後の
SelectedValue='<%# Bind("品目ID") %>' はいらないんじゃないですか? | ||||
|
投稿日時: 2009-03-30 00:11
回答、ありがとうございます。 FormView自体のデータベースは、製品を保存しているデータです。 <Seihin>table 見積No |製品ID |工種ID |品目ID |製品名 ----------------------------------------- 1 |1 |1 |1 |製品A 1 |2 |1 |2 |製品B 3 |3 |2 |1 |製品C 4 |4 |2 |3 |製品D 製品のテーブルは、上記のようが、 製品を修正する画面ですので、1行のみ読み込んで FormViewに表示しています。 SelectedValue='<%# Bind("品目ID") %>'を無しにすると、 もちろんうまく行きます。(連動が外れるため) ですが、EditItemTemplateでは、 工種名も品目名も読み込む必要があるため、 SelectedValue='<%# Bind("工種ID") %>' SelectedValue='<%# Bind("品目ID") %>' ともに、 必要なんです。 | ||||
|
投稿日時: 2009-03-30 01:28
FormView1のDataBoundイベントハンドラで
if(FormView1.CurrentMode==FormViewMode.Edit) { ((DropDownList)FormView1.FindControl("Hinmoku")).SelectedValue = ((DataRowView)FormView1.DataItem)["品目ID"].ToString(); } などとしてはどうでしょう。 | ||||
|
投稿日時: 2009-04-01 12:35
出来ました。べる様、ありがとうございました。 DropDownList に今まで全く気付かなかった不具合があって、 ご提案して頂いた方法でも出来なくて、困っていたのですが、 その不具合を特定し、修正後に、 ご提案して頂いたようにやったら、出来ました。 本当にありがとうございました。 |
1