我有一个包含多列的 GridView,第一列有一个下拉列表,允许用户选择一个学期。当他们选择学期时,它应该将该所选值保存到下拉列表中。有一个加载下拉列表的表,然后是一个加载列的表。我的目标是允许他们从下拉列表中选择一个值,填写其他列并保存结果,因此一旦他们返回到页面,下拉菜单的所选值将与其他数据一起显示。有两个表,一个用于要选择的值的下拉列表,另一个表包含所选的实际值。当我在包含实际值的主数据库表中输入"Spring"时,出现以下错误。任何帮助不胜感激!
法典:
<asp:DropDownList ID="ddSemester" runat="server" DataSourceID="SemesterSrc" DataTextField="Semester" DataValueField="SemesterId" SelectedValue='<%#Bind("Semester") %>'>
<asp:SqlDataSource ID="SemesterSrc" runat="server" ConnectionString="<%$ ConnectionStrings:mainConnString %>" SelectCommand="SELECT * FROM [Semester]"></asp:SqlDataSource>
错误:
$exception {"'ddSemester' 有一个无效的 SelectedValue,因为 它不存在于项目列表中。参数名称: value"} System.ArgumentOutOfRangeException
我在数据库中的值是 Spring,所以 Spring 应该显示在下拉列表中。
SelectedValue 应该是数据库中的单个值,例如"Spring"或"Summer"。不应将其设置为数据库中的整列数据。现在,它正在尝试绑定到整个列。这仅在您的 select 语句返回一行时才有效,但我什至不确定这是否正确。是否需要在加载时设置所选值?通常,如果有多个数据控件,其中一个控件筛选另一个控件,则需要两个数据源,其中一个数据源具有筛选器集:
<asp:DropDownList ID="ddSemester" runat="server" DataSourceID="SemesterSrc" DataTextField="Semester" DataValueField="SemesterId">
<asp:SqlDataSource ID="SemesterSrc" runat="server" ConnectionString="<%$ ConnectionStrings:mainConnString %>" SelectCommand="SELECT DISTINCT Semester,SemesterId FROM [Semester]"></asp:SqlDataSource>
<asp:SqlDataSource ID="SemesterSrcFiltered" runat="server" ConnectionString="<%$ ConnectionStrings:mainConnString %>" SelectCommand="SELECT * FROM [Semester]" FilterExpression="Semester='{0}'">
<FilterParameters>
<asp:ControlParameter Name="Semester" ControlId="ddSemester" PropertyName="SelectedValue"/>
</FilterParameters>
</asp:SqlDataSource>
DDL 将设置一个值,该值由 SemesterSrcFiltered 数据源的"筛选器参数"部分用于仅按该值筛选出数据。然后,可以在其他控件(如网格视图(中使用该数据源来显示更多信息。不应将两个控件都设置为一个数据源,并尝试使用筛选动态操作该数据源,而不会意外地影响 DDL。