0

我有带有 DropDownList 的网格,它有静态数据。它正在被完美保存。但是,在编辑时,我需要SelectedValue从数据库中获取 DropDown。

我的代码是:

<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,因为它不存在于项目列表中。

任何人都可以帮忙吗?

4

1 回答 1

1

在尝试分配之前测试该值是否存在于您的 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 问题中找到它们:How to programatically set SelectedValue of Dropdownlist when it is bound to XmlDataSource

于 2013-02-15T08:04:54.780 回答