从gridview中输入下拉列表

时间:2011-08-15 20:51:13

标签: c# asp.net gridview casting

我正在尝试使用findcontrol方法动态填充下拉列表。我一直得到一个空参考,并尝试了几种不同的方式。这是我尝试过的一些代码。

<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();

3 个答案:

答案 0 :(得分:2)

您的下拉列表位于项目模板中。这意味着如果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();
    }
}
}

答案 1 :(得分:1)

由于这是在项目模板中,最简单的方法是在下拉列表中使用处理程序:

<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;

答案 2 :(得分:1)

因为这是gridview中的一行,所以此下拉列表可能有很多实例。你必须遍历gridview中的每一行

foreach (GridViewRow tt in GridView1.Rows)
        {
            if (tt.RowType == DataControlRowType.DataRow)
            {                    
              tt.FindControl("ddlCalculateGrid");
            }
        }
相关问题