2008-12-01 45 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