如何将数据库值的SelectedValues绑定到网格中的下拉列表
本文关键字:网格 下拉列表 绑定 SelectedValues 数据库 | 更新日期: 2023-09-27 17:59:00
我有一个带有DropDownList的Grid,它有静态数据。它被完美地保存了下来。但是,在编辑时,我需要从数据库中获取DropDown的SelectedValue
。
我的代码是:
<asp:TemplateField ItemStyle-HorizontalAlign="Center" HeaderText="Order">
<ItemTemplate>
<asp:DropDownList ID="ddlOrder" SelectedValue='<%# (DataBinder.Eval(Container.DataItem,"Order")) %>' runat="server" Width="60">
<asp:ListItem Text="1" Value="1"></asp:ListItem>
<asp:ListItem Text="2" Value="2"></asp:ListItem>
<asp:ListItem Text="3" Value="3"></asp:ListItem>
<asp:ListItem Text="4" Value="4"></asp:ListItem>
</asp:DropDownList>
</ItemTemplate>
和:
protected void gvServicePort_RowDataBound(object sender , GridViewRowEventArgs e)
{
//DropDown
if (e.Row.RowType == DataControlRowType.DataRow)
{
var dropdownList = (DropDownList)e.Row.FindControl("ddlOrder");
for (int i = 1; i < 15; i++)
{
dropdownList.Items.Add(i.ToString());
}
dropdownList.SelectedValue =
Convert.ToString(DataBinder.Eval(e.Row.DataItem, "Order"));
}
}
它抛出了一个错误,即"ddlOrder"有一个SelectedValue,该值无效,因为它不存在于项列表中。
有人能帮忙吗?
在尝试分配之前,测试DropDownList中是否存在该值。
if (dropdownList.Items.FindByValue(value) != null)
{
// go ahead and assign
dropdownList.SelectedValue = value;
}
else
{
// handle the issue if necessary
}
我曾经遇到过该值确实存在于列表中,但设置SelectedValue是不可预测的,仍然会导致您提到的"不存在于列表"错误。如果发现这种情况,您可能需要尝试以下选项之一来分配所选项目。
使用FindByValue方法:
dropdownList.Items.FindByValue(value).Selected = true;
或者这个:
dropdownList.SelectedIndex = dropdownList.Items.IndexOf(dropdownList.Items.FindByText(value));
我总是忘记如何实现最后两个片段,但我在这个SO问题中找到了这两个片段:当Dropdownlist绑定到XmlDataSource时,如何用程序设置它的SelectedValue。