我有一个类似于此的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,并将其放入DataGrid。
问题是,这是在ddlMaxOrderLevel绑定到它的DataSource之前发生的,所以我收到一个运行时错误,告诉我不能设置SelectedValue。
如果ddlMaxOrderLevel不在DataGrid中,我可以直接调用DataBind()。但是,在这个场景中,我不能这样做--因为它在ItemTemplate中。
有人能提出解决办法或替代办法吗?
发布于 2009-02-09 14:09:38
创建另一个DataSource并将其绑定到DataGrid。其中,SelectMethod将返回简单对象中的默认值。
那么所有的绑定都应该愉快地一起工作。
发布于 2008-12-01 12:14:13
您可以在DropDownlist的Databound事件中执行DataGrid的数据库处理。
编辑:我将给你一个我测试过的例子:
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();
}
}https://stackoverflow.com/questions/330571
复制相似问题