无法在行命令中找到编辑模板控件复选框

时间:2018-03-14 06:05:15

标签: c# asp.net gridview rowdatabound rowcommand

我试图控制编辑模板,这是行命令事件中的复选框,但我无法得到它,但我得到的是行索引中的标签控件。

我尝试了以上代码来获取控件:

protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
{
    GridViewRow gvr = (GridViewRow)(((ImageButton)e.CommandSource).NamingContainer);

    Label icllbl = (Label)GridView1.Rows[gvr.RowIndex].FindControl("icllbl");
    CheckBox iclcb = (CheckBox)GridView1.Rows[gvr.RowIndex].FindControl("iclcb");

    if (e.CommandName.Equals("Edit"))
    {                
        if (icllbl.Text == "Y")
        {
            iclcb.Checked = true;
        }

    }
}

我尝试了RowDataBound事件,幸运的是我在这里得到了复选框控件,但这次我无法在下面的代码中获得Label控件:

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{

    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        Label icllbl = (Label)e.Row.FindControl("icllbl");

        if ((e.Row.RowState & DataControlRowState.Edit) > 0)
        {

            CheckBox iclcb = (CheckBox)e.Row.FindControl("iclcb");
            if (icllbl.Text == "Y")
            {
                iclcb.Checked = true;
            }
        }
    }
}

如果我在任何地方都错了,请纠正我。

提前致谢!

1 个答案:

答案 0 :(得分:0)

在您的RowCommand事件中,使用control类投射到GridViewRow

GridViewRow row = (GridViewRow)(((Control)e.CommandSource).NamingContainer);
int rowIndex = row.RowIndex;

并在RowDataBound事件中将Label控件放入Edit(检查EditTemplate)中检查:

if ((e.Row.RowState & DataControlRowState.Edit) > 0)
{
    Label icllbl = (Label)e.Row.FindControl("icllbl");
    CheckBox iclcb = (CheckBox)e.Row.FindControl("iclcb");

    //... other code of lines will be here
}