我有一个看起来像这样的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
。
问题是这是在{/ 1>} ddlMaxOrderLevel 绑定到DropDownList
之前发生的,所以我遇到了运行时错误告诉我DataSource
无法设置。
如果 ddlMaxOrderLevel 不在SelectedValue
,我可以在其上调用DataGrid
。但是,在这种情况下我无法做到这一点 - 因为它位于DataBind()
。
有人可以提出解决方法或替代方法吗?
答案 0 :(得分:1)
您可以在DataGrid的Databound事件中执行DropDownlist的数据绑定。
编辑: 我将举例说明我已经测试过:
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();
}
}
答案 1 :(得分:0)
创建另一个DataSource并将其绑定到DataGrid。 SelectMethod将在简单对象中返回默认值。
然后所有绑定应该愉快地一起工作。