ObjectDataSource(objStudentDetails)にバインドするGridviewがあります。Gridviewの編集/挿入モードでは、フィールドの1つはDropDownListであり、ルックアップテーブルから選択リストオプションを取得します。このDropDownListは、ルックアップテーブルを表す別のObjectDataSourceコントロール(objStateList)にバインドされています。objStudentDetails ObjectDataSourceの値がobjStateListObjectDataSourceの値の1つと一致する限り、少なくとも空でない文字列値の場合は、正常に機能します。
objStateListには次の値があります(それをロードするストアドプロシージャから-ID#6は空の文字列''です):
StateId State
----------- -----
6
4 AL
1 GA
3 KY
2 TN
objStudentDetailsには、(それをロードするストアドプロシージャからの)次の値があります。
FirstName LastName State
----------- ---------- -----
tone smith TN
または、この結果セットを持つこともできます(状態は空の文字列-''):
FirstName LastName State
----------- ---------- -----
jenny johnson
最初のobjStudentDetails結果セットでは、EditItemTemplateの状態DropDownListが正常に表示されます。ただし、2番目の結果セットでは、次のエラーが発生します。
'ddlEditState' has a SelectedValue which is invalid because it does not exist in the list of items.
Parameter name: value
私のルックアップテーブルには空の文字列を持つ値があるので、状態の空の文字列を持つobjStudentDetails値は一致すると思いますが、何かが期待どおりに機能していません。
これがGridviewからの私のEditItemTemplateコードです:
<EditItemTemplate>
<asp:Panel ID="panEditState" runat="server">
<asp:DropDownList ID="ddlEditState" runat="server" CssClass="GridviewDropdownlist"
DataSourceID="objStateList" DataTextField="State" DataValueField="State"
SelectedValue='<%# Bind("State") %>'
Width="50px">
</asp:DropDownList>
</asp:Panel>
</EditItemTemplate>
そして、objStateListは、クエリするルックアップテーブルのパラメーターを渡すメソッドを呼び出します。
<asp:ObjectDataSource ID="objStateList" runat="server" SelectMethod="GetDropdownData" TypeName="AIMLibrary.BLL.DropdownData">
<SelectParameters>
<asp:Parameter Name="itemsToGet" DefaultValue="state" />
</SelectParameters>
</asp:ObjectDataSource>
何か案は?