Asp.net 如何查找GridView行命令事件上的控件?

Asp.net 如何查找GridView行命令事件上的控件?,asp.net,gridview,aspxgridview,Asp.net,Gridview,Aspxgridview,我尝试过类似的方法,但没有成功: GridViewRow row = (GridViewRow)(((Repeater)e.CommandSource).NamingContainer); Repeater _rpt1 = row.Cells[8].FindControl("rptReg") as Repeater; 错误: Unable to cast object of type 'System.Web.UI.WebControls.Button' to type 'System.Web

我尝试过类似的方法,但没有成功:

GridViewRow row = (GridViewRow)(((Repeater)e.CommandSource).NamingContainer); 
Repeater _rpt1 = row.Cells[8].FindControl("rptReg") as Repeater;
错误:

Unable to cast object of type 'System.Web.UI.WebControls.Button' to type 'System.Web.UI.WebControls.Repeater'.
是否有一种方法可以使用GridView在
OnRowCommand
事件中生成以下代码

实际上,我正在尝试从gridview控件中删除该行,当用户单击该行时,我将获取多个ID并将其传递给SP并更新该表,然后
数据绑定gridview

GridViewRow row = gv.SelectedRow;           
    Repeater _rpt = gv.Rows[e.RowIndex].Cells[8].FindControl("rptReg") as Repeater;
    Repeater _rpt1 = gv.Rows[e.RowIndex].Cells[9].FindControl("rptVisitor") as Repeater;

    foreach (RepeaterItem item in _rpt.Items)
    {
        TextBox _txt = item.FindControl("txtId") as TextBox;
        TextBox _txt1 = item.FindControl("txtName") as TextBox;
        //update db
    }

您的错误告诉我名为“rptReg”的控件是一个按钮

GridView有一个名为DataKeys的属性,它可以保存多个ID 所以你会拿出“人形”像:

请试试这个:

var viewRow = (GridViewRow)(((ImageButton)e.CommandSource).NamingContainer);
foreach (GridViewRow gvr in gvDetails.Rows)
{
    var btnSelect = (ImageButton)viewRow.FindControl("btnSelect");
    if (gvr == viewRow)
    {
        if (btnSelect.ImageUrl.ToLower() == "~/images/rbnormal.jpg")
        {
            btnSelect.ImageUrl = "~/Images/rbSelected.jpg";
            btnSelect.Enabled = false;
        }
    }
    else
    {
        btnSelect.ImageUrl = "~/Images/rbnormal.jpg";
        btnSelect.Enabled = true;
    }
}

我不确定我是否遵循,但在OnRowCommand中,您可以检查e.CommandName==“delete”是否正确,但我遇到了一种情况,我正在寻找一种方法在RowCommand中执行FindControl?我猜中继器将为空?也许您应该将gv定义为“Gridview gv=(Gridview)sender”;如果我更改为
Gridview
,那么您将如何获取
单元格
?您是否在Gridview中使用中继器控件?gvDetails未定义。
var viewRow = (GridViewRow)(((ImageButton)e.CommandSource).NamingContainer);
foreach (GridViewRow gvr in gvDetails.Rows)
{
    var btnSelect = (ImageButton)viewRow.FindControl("btnSelect");
    if (gvr == viewRow)
    {
        if (btnSelect.ImageUrl.ToLower() == "~/images/rbnormal.jpg")
        {
            btnSelect.ImageUrl = "~/Images/rbSelected.jpg";
            btnSelect.Enabled = false;
        }
    }
    else
    {
        btnSelect.ImageUrl = "~/Images/rbnormal.jpg";
        btnSelect.Enabled = true;
    }
}