2008-12-01 47 views
0

我有一個DataGrid,看起來像這樣(在這裏稍作簡化)順序:數據綁定DropDownList的DataGrid中 - 結合

<asp:DataGrid ID="grdQuotas" runat="server" AutoGenerateColumns="False"> 
    <HeaderStyle CssClass="quotas-header" /> 
    <Columns> 
     <asp:TemplateColumn> 
      <HeaderTemplate> 
       Max order level</HeaderTemplate> 
      <ItemTemplate> 
       <asp:DropDownList ID="ddlMaxOrderLevel" runat="server" DataSourceID="xdsOrderLevel" 
        DataTextField="Text" DataValueField="Value" SelectedValue='<%# Bind("MaxOrderLevel") %>'> 
       </asp:DropDownList> 
      </ItemTemplate> 
     </asp:TemplateColumn> 
    </Columns> 
</asp:DataGrid> 

<asp:XmlDataSource ID="xdsOrderLevel" runat="server" DataFile="~/App_Data/OrderLevels.xml"> 
</asp:XmlDataSource> 

在我Page_Load事件處理程序我創建一個DataTable包含默認值和DataBind它荷蘭國際集團,以DataGrid

的問題是,這正在發生DropDownListddlMaxOrderLevel已經被綁定到其DataSource,所以我得到一個運行時錯誤告訴我,SelectedValue不能設置。

如果ddlMaxOrderLevelDataGrid不是我可以調用它DataBind()。不過,我不能在這種情況下這樣做 - 因爲它在ItemTemplate

任何人都可以提出一個解決方法或替代方法?

回答

0

創建另一個數據源,並將其綁定到DataGrid。 SelectMethod將返回一個簡單對象的默認值。

然後所有的綁定應該愉快地一起工作。

1

您可以在DataGrid的Databound事件中執行DropDownlist的Databinding。

編輯: 我會給你,我已經測試了一個例子:

protected void dg_ItemDataBound(object sender, DataGridItemEventArgs e) 
    { 
     if (e.Item.ItemType != ListItemType.Header && e.Item.ItemType != ListItemType.Footer) 
     { 
      DropDownList dl = (DropDownList)((DataGridItem)e.Item).FindControl("ddlMaxOrderLevel"); 

      dl.DataSource = levels; 
      dl.DataBind(); 

      dl.SelectedValue = ((DataRowView)e.Item.DataItem)["number"].ToString(); 


     } 

    } 
+0

不幸的是,將不會出現在我原來的問題中概述相同的原因:DropDownList是在一個ItemTemplate內,因此不存在作爲一個實例化的控件,你可以參考 – 2008-12-01 13:23:06