C# 如何将数据库值的SelectedValues绑定到网格中的下拉列表?

C# 如何将数据库值的SelectedValues绑定到网格中的下拉列表?,c#,asp.net,gridview,drop-down-menu,datagridview,C#,Asp.net,Gridview,Drop Down Menu,Datagridview,我有DropDownList的网格,它有静态数据。它正得到完美的拯救。但是,在编辑时,我需要从数据库中获取下拉列表的SelectedValue 我的代码是: <asp:TemplateField ItemStyle-HorizontalAlign="Center" HeaderText="Order"> <ItemTemplate> <asp:DropDownList ID="ddlOrder" SelectedValue='<%# (

我有DropDownList的网格,它有静态数据。它正得到完美的拯救。但是,在编辑时,我需要从数据库中获取下拉列表的
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>

以及:

protectedvoid gvServicePort_RowDataBound(对象发送方,GridViewRowEventArgs e)
{
//下拉列表
如果(e.Row.RowType==DataControlRowType.DataRow)
{
var dropdownList=(dropdownList)e.Row.FindControl(“ddlOrder”);
对于(int i=1;i<15;i++)
{
dropdownList.Items.Add(i.ToString());
}
dropdownList.SelectedValue=
Convert.ToString(datainder.Eval(例如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));
我总是忘记如何实现最后两个代码段,但我能够在这个问题中找到它们:

dropdownList.SelectedIndex = dropdownList.Items.IndexOf(dropdownList.Items.FindByText(value));