为什么在尝试从 ASP.net 2.0 vb 中的 DropDownList 中预选值时出现运行时错误?
我试图用 GridView 做同样的事情,我得到了同样的信息。
最初,我试图向用户展示他们提交的申请访问权限的详细信息。单击编辑按钮时,我希望允许用户更改他们提交给我们的详细信息并更新应用程序。我不打算在数据库中进行任何额外的插入。
我想限制用户从下拉列表中选择部门。当用户点击编辑时,我希望他们最初申请的部门被预先选择。当我有线路时:
SelectedValue='<%# Bind("department") %>'
我收到运行时错误。如果我删除该行,它不会出错,但不会预先选择任何东西。
有人能帮我理解为什么它不起作用吗?
其他可能有帮助的是我正在使用 Visual Studio 2005,并且当我键入时,类属性会在我键入时显示。当我按下空格键时,我可以看到 DropDownList 的许多属性,但 SelectedValue 不是其中之一,这让我觉得我正在尝试做一些不应该工作的事情。
我的代码:
<asp:SqlDataSource ID="UserDetails_Conn" runat="server"
ConnectionString="<%$ ConnectionStrings:NormCon %>"
SelectCommand="SELECT u.first_name, u.last_name, u.email, d.department FROM mis_userlist AS u INNER JOIN mis_depts AS d ON u.dept_id = d.dept_id WHERE (u.windows_login = @windows_ID)"
UpdateCommand="UPDATE mis_userlist SET first_name = @first_name, last_name = @last_name, email = @email, dept_id = @dept_id WHERE (windows_login = @windows_ID)"
>
<SelectParameters>
<asp:SessionParameter Name="windows_ID" SessionField="username" />
</SelectParameters>
<UpdateParameters>
<asp:Parameter Name="first_name" />
<asp:Parameter Name="last_name" />
<asp:Parameter Name="email" />
<asp:Parameter Name="dept_id" />
<asp:Parameter Name="windows_ID" />
</UpdateParameters>
</asp:SqlDataSource>
<asp:DetailsView ID="UserDetailsView" runat="server" Height="50px" Width="125px" AutoGenerateRows="False" DataSourceID="UserDetails_Conn">
<Fields>
<asp:BoundField DataField="first_name" HeaderText="first_name" SortExpression="first_name" />
<asp:BoundField DataField="last_name" HeaderText="last_name" SortExpression="last_name" />
<asp:BoundField DataField="email" HeaderText="email" SortExpression="email" />
<asp:TemplateField HeaderText="department" SortExpression="department">
<EditItemTemplate>
<asp:SqlDataSource ID="DepartmentList" runat="server"
ConnectionString="<%$ ConnectionStrings:NormCon %>"
SelectCommand="SELECT dept_id, department FROM mis_depts ORDER BY department"
>
</asp:SqlDataSource>
<asp:DropDownList ID="ddlDepartments" runat="server"
DataSourceId="DepartmentList"
DataTextField="department"
DataValueField="dept_id"
SelectedValue='<%# Bind("department") %>' > <!-- Errorsome line -->
</asp:DropDownList>
</EditItemTemplate>
<InsertItemTemplate>
<asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("department") %>'></asp:TextBox>
</InsertItemTemplate>
<ItemTemplate>
<asp:Label ID="Label1" runat="server" Text='<%# Bind("department") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:CommandField ShowEditButton="True" />
</Fields>
</asp:DetailsView>
解决方案
连同 Win 的解决方案,我需要在 SQL 字符串中添加 dept_id 字段。
SelectCommand="SELECT u.first_name, u.last_name, u.email, d.department, d.dept_id FROM mis_userlist AS u INNER JOIN mis_depts AS d ON u.dept_id = d.dept_id WHERE (u.windows_login = @windows_ID)"
这允许在此处表示的部门:ddlDepartments.SelectedValue = Department
成为可以与 DropDownList 中的 DataValueField="dept_id" 行链接的值。
感谢胜利。