2013-02-14 25 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

相關問題