C# 如何在gridview中查找特定行的值?

C# 如何在gridview中查找特定行的值?,c#,.net,asp.net,visual-studio,gridview,C#,.net,Asp.net,Visual Studio,Gridview,如何在gridview中找到特定行的值。假设gridview有10行4列。我知道我们可以从行索引中找到行号,但我们如何才能找到第5行第2列的值(根据我的gridview)或知道单元格的值?假设每列有一个单元格,这应该可以做到: string cellValue = GridView1.Rows[4].Cells[1].Text; 这将给出第5行第2列的值 根据行的构建方式(例如,如果一列具有DropDownList或其他类似控件),您最好使用FindControl(controlID) 更新

如何在gridview中找到特定行的值。假设gridview有10行4列。我知道我们可以从行索引中找到行号,但我们如何才能找到第5行第2列的值(根据我的gridview)或知道单元格的值?

假设每列有一个单元格,这应该可以做到:

string cellValue = GridView1.Rows[4].Cells[1].Text;
这将给出第5行第2列的值

根据行的构建方式(例如,如果一列具有DropDownList或其他类似控件),您最好使用
FindControl(controlID)

更新

假设您在第二列中有一个ID=“ddlMyDropDown”的
DropDownList

将代码放入哪个事件取决于您试图查找值的原因。如果你能举例说明何时/为什么需要获取该值,我们可以告诉你它可能应该进入哪个事件

更新2

假设行中有一个按钮,处理
RowCommand
事件:

protected void GridVie1_RowCommand(object sender, GridViewCommandEventArgs e)
{

    rowIndex = Convert.ToInt32(e.CommandArgument);

    DropDownList ddl = (DropDownList)GridView1.Rows[rowIndex].Cells[1].FindControl("ddlMyDropDown");

    // Do something
}
但是,在这里一定要小心,因为只要单击行中的按钮,就会触发row命令,因此您需要确保单击了哪个按钮。您可以使用
e.CommandName
获取按钮的CommandName(如果您设置了它),但是请注意,有一些预定义的名称

有关更多信息,请参阅

如果您可以使用更多信息更新您的问题(例如,为什么需要获取值以及与GridView的什么交互将启动该过程,如单击按钮),则可以提供更精确的答案

我今晚就要结束了,但我明天会再查看此线程。

使用以下命令:

CustomersGridView.Rows[rowIndex].Cells[cellIndex].Text
更多关于收藏

如果您对
FindControl
方法感兴趣,最适合您的活动是:


如果你知道一个单元格的值,那么我们可以找到该行

protected void GridView1_DataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        if (e.Row.Cells[0].Text.Contains("sometext"))
        {
            //code here..
        }
    }
}

如何使用FindControl?另外,将代码放在哪里,我是指哪个事件?从上面的示例(ddl)中,我不知道用户单击了哪一行。由于alerady提供了ID(主键列)作为命令参数,因此无法将其作为命令参数提供。因此,我需要知道单击了哪一行,或者如果我将行索引作为命令参数,我需要通过单击行来知道ID(主键列)的值,如果您的意思是单击了行中的按钮,则可以处理RowCommand事件。这就是你在做的吗?是的。。像这样的事。。。我需要知道单击了哪一行或ID的值。谢谢!。但是rowcommand事件没有被激发?我仍然与gridview绑定..cellIndex中需要提供什么?@Xor power您必须将控件强制转换为所需的类型。更新了答案。发布GridView的标记和相关事件代码将有助于我们帮助您解决所看到的问题。
void CustomersGridView_RowDataBound(Object sender, GridViewRowEventArgs e)
{
    if(e.Row.RowType == DataControlRowType.DataRow)
    {
        var control = e.Row.Cell[cellIndex].FindControl("ControlID");
        e.Row.Cells[1].Text = ((TypeOfControl)control).Text;
    }
}
protected void GridView1_DataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        if (e.Row.Cells[0].Text.Contains("sometext"))
        {
            //code here..
        }
    }
}