トップ回答者
FormViewの編集で、ドロップダウンリストのSelectedValueを指定するとエラーになる

質問
-
こんにちわ。
FormView編集時、ドロップダウンリストには編集前の値を保持し、ドロップダウンリストから選択する値は
DBからバインドしたデータを表示させたいと思っています。
FormViewの編集(EditItem)で、ドロップダウンリストにSelectedValueを指定すると
下記の様なエラーが表示されます。
「項目一覧に存在しないため、'XXX'にSelectedValueを指定することは無効です。
パラメーター名: value」
☆ソース(一部抜粋)--------------------------------------------------------------------------
<asp:DropDownList ID="XXX" runat="server"
DataSourceID="SqlDataSource1" DataTextField="〇〇〇" DataValueField="△△△"
SelectedValue='<%#Bind("□□□") %>'></asp:DropDownList>
<asp:SqlDataSource ID="SqlDataSource1" runat="server"
ConnectionString="<%$ ConnectionsStrings:ConnectionString %>"
SelectCommand="SELECT id,name FROM SampleTbl">
</asp:SqlDataSource>
------------------------------------------------------------------------------------------
下記の”EDIT時のDtailsViewにDropDownListができません”という件に似ていますが
FormViewのドロップダウンリストのDataBoundの書き方(VB)がわからないので教えていただけないで
しょうか。
よろしくおねがいします。
mai akiyama
- 編集済み あきまい 2014年4月22日 5:10
回答
-
NULL に対応する前に LEFT OUTER JOIN で本当に望む結果が得られているか確認してください。INNER JOIN にすべきかもしれません。
LEFT OUTER JOIN で OK で NULL があるのが望む結果であれば、DropDownList に、
<asp:ListItem Value="">空白</asp:ListItem>
を追加して、DropDownList で AppendDataBoundItems="True" と設定すればうまく行きそうな気がします。お試しください。- 回答としてマーク あきまい 2014年4月24日 0:23
すべての返信
-
> DataSourceID="SqlDataSource1" DataTextField="〇〇〇" DataValueField="△△△"
> SelectedValue='<%#Bind("□□□") %>'></asp:DropDownList>上記のコードで 〇〇〇、△△△、□□□ のところは実際どうなっているんですか?
テーブル SampleTbl の一覧を表示したいなら、DataTextField="name" DataValueField="id" となるはずです。
エラーメッセージは、id の一覧の中に <%#Bind("□□□") %> に該当するものがないと言ってます。□□□ は FormView のデータソース中の項目の id に該当するものになるはずですが、そのへんの関係に間違いがあるのでは?
上記のヒントで分からなければ、FromView を含めて、差し障りない範囲でコードをアップしてください。
PS.コードは、入力ウィンドウの上にある「コードブロックの表示」アイコン(右から二つ目)をクリックして、それに入力してください。- 編集済み SurferOnWww 2014年4月22日 6:37 一部修正
-
SurferOnWwwさま
早速のご回答ありがとうございます。
>上記のコードで 〇〇〇、△△△、□□□ のところは実際どうなっているんですか?
<EditItemTemplate> <asp:DropDownList ID="スタンプddl" runnat="server" DataSourceID="SqlDataSource1" DataTextField="スタンプ名称" DataValueField="スタンプ番号" AppendDataBoundItems="true" SelectedValue='<%#Bind("スタンプ") %>'></asp:DropDownList> </EditItemTemplate> <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:ConnectionString %>" SelectCommand="SELECT [スタンプ番号],[スタンプ名称] FROM [スタンプテーブル] ">
<スタンプテーブル>
スタンプ番号 | スタンプ名称
--------------------------------------------------
01 | OK
02 | NG
03 | 祝
:
以上のようになっていて、たとえばドロップダウンリストの「OK」を選択した場合は
FormViewのスタンプに「01」が設定されるイメージです。
ちなみに、FormViewのスタンプに設定した「01」は、スタンプテーブルに存在しています。
>。□□□ は FormView のデータソース中の項目の id に該当するものになるはずですが、そのへんの関係に間違いがあるのでは?
ドロップダウンリストではなくて、普通のテキストボックスの場合は、FormViewのスタンプに編集前のスタンプ番号がちゃんとバインドされていました。
やはりDataBoundのようなコードを書かないといけないのでしょうか?
よろしくお願いします。
mai akiyama
- 編集済み あきまい 2014年4月22日 7:34
-
FormView とそのデータソース(SqlDataSource ですか?)を含めたコードをアップできませんか。こちらではそのあたりが見えないと分からないです。
あと、ご自分の環境(OS, .NET, IIS, Visual Studio, SQL Server などのバージョン)を書いてください。
【追伸】
> やはりDataBoundのようなコードを書かないといけないのでしょうか?
いえ、何か特別な事情がなけれれば、ウィザードを使って、一行も自分ではコードをかかずにできるはずです。
- 編集済み SurferOnWww 2014年4月22日 10:07 追伸追加
-
-
NULL に対応する前に LEFT OUTER JOIN で本当に望む結果が得られているか確認してください。INNER JOIN にすべきかもしれません。
LEFT OUTER JOIN で OK で NULL があるのが望む結果であれば、DropDownList に、
<asp:ListItem Value="">空白</asp:ListItem>
を追加して、DropDownList で AppendDataBoundItems="True" と設定すればうまく行きそうな気がします。お試しください。- 回答としてマーク あきまい 2014年4月24日 0:23
-
SurferOnWwwさま
ご回答ありがとうございます。教えていただいたとおり修正しましたら、無事動きました。
どうもありがとうございました!とても助かりました!!
<asp:DropDownList ID="スタンプ名称DropDownList" runat="server" DataSourceID="SqlDataSource2" DataTextField="スタンプ名称" DataValueField="スタンプ名称" AppendDataBoundItems="true" SelectedValue='<%# Bind("スタンプ") %>'> <asp:ListItem Value=""> </asp:ListItem> </asp:DropDownList>
mai akiyama
- 編集済み あきまい 2014年4月24日 0:25