![](/img/trans.png)
[英]How to Bind dropdown list from the value of other dropdown list in Gridview
[英]Cast a dropdown list from a gridview
我正在尝试使用 findcontrol 方法来动态填充下拉列表。 我不断获得 null 参考,并尝试了几种不同的方法。 这是我尝试过的一些代码。
<ItemTemplate>
<asp:DropDownList runat="server"
ID="ddlCalculateGrid"
Style="border: none; border-width: 0px; width: 90%"
OnSelectedIndexChanged="ddlCalculateGrid_OnSelectedIndexChanged"
AutoPostBack="true">
</asp:DropDownList>
<asp:HiddenField runat="server"
ID="hdnCalculate"
Value='<%# Eval("Calculate") %>' />
</ItemTemplate>
这是后端代码。
DropDownList tempddl;
tempddl = (DropDownList)grvbillDetail.FindControl("ddlCalculateGrid");
tempddl.DataSource = rcta.GetDataByTrueValue();
tempddl.DataBind();
您的下拉列表位于项目模板中。 这意味着如果 gridview 绑定到没有行的源,您的 gridview 可能包含多个下拉菜单(每行一个)或根本不包含。
如果您希望为每一行绑定每个下拉列表,您可以在 GridViewRowDatabound 事件中这样做,就像这样。
protected void Page_Load(object sender, EventArgs e)
{
grvbillDetail.RowDataBound += grvbillDetail_RowDataBound;
}
void grvbillDetail_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType != DataControlRowType.DataRow)
return;
var ddl = e.Row.FindControl("ddlCalculateGrid") as DropDownList;
if (ddl != null)
{
ddl.DataSource = rcta.GetDataByTrueValue();
ddl.DataBind();
}
}
}
由于这是在项目模板中,最简单的方法是在下拉列表本身上使用处理程序:
<asp:DropDownList runat="server" ID="ddlCalculateGrid"
Style="border: none; border-width: 0px;width: 90%"
OnSelectedIndexChanged="ddlCalculateGrid_OnSelectedIndexChanged"
OnLoad="ddlCalculateGrid_OnLoad"
AutoPostBack="true">
然后在 ddlCalculateGrid_OnLoad 方法中:
DropDownList tempddl = (DropDownList)sender;
因为这是 gridview 中的一行,所以这个下拉列表可能有很多实例。 您必须遍历 gridview 中的每一行
foreach (GridViewRow tt in GridView1.Rows)
{
if (tt.RowType == DataControlRowType.DataRow)
{
tt.FindControl("ddlCalculateGrid");
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.