2013-02-14 37 views
0

我有DropDownList网格,它有静态数据。它被完美保存。但是,在编辑时,我需要从DataBase中获取DropDown的SelectedValue如何将DataBase值的SelectedValues绑定到Grid中的下拉列表?

我的代码是:

<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这是无效的,因为它没有在列表中存在项目。

任何人都可以帮忙吗?

回答

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)); 

我总是忘了如何实现这些最后两个片段,但是我能发现他们两个在这太问题: How to programatically set SelectedValue of Dropdownlist when it is bound to XmlDataSource

相关问题