C# 在Gridview中获取RowCommand事件的隐藏字段

C# 在Gridview中获取RowCommand事件的隐藏字段,c#,asp.net,gridview,C#,Asp.net,Gridview,如果我在gridview上有两个按钮,每个按钮执行不同的功能。比如我下面的代码 protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e) { if (e.CommandName == "Select") { //Do something else } else if (e.CommandName == "View Cert") {

如果我在gridview上有两个按钮,每个按钮执行不同的功能。比如我下面的代码

protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
{
    if (e.CommandName == "Select")
    {
        //Do something else
    }
    else if (e.CommandName == "View Cert")
    {
        int index = Convert.ToInt32(e.CommandArgument);
        GridViewRow row = GridView1.Rows[index];
        errorlab.Text = row.Cells[3].Text;
    }

}

单元格3的值是一个隐藏字段,数据库中有一个值绑定到隐藏字段,但我的代码无法获取该值。errorlab标签没有显示任何内容。也许我错过了什么

如果gridview单元格上还有其他控件,则必须使用controls属性访问它们

 HiddenField hiddenField =row.Cells[3].Controls[0] as HiddenField;
 if(hiddenField != null)
    errorlab.Text = hiddenField.Value;

必须为控件使用正确的索引。调试代码并检查控件在row.Cells[3].Controls中的位置。

始终尝试避免在gridview中按其索引位置引用单元格,因为如果您在将来碰巧在网格中添加/删除更多的列,这可能会导致更改代码,从而导致不期望的结果。还要注意的是,它没有
文本
属性,而是有
属性来访问它的值

如果您知道hiddenfield的名称,那么最好尝试通过它的名称访问它。假设您在gridview中定义了hiddenfield,如下所示

 <ItemTemplate>
     <asp:HiddenField ID ="hdnField" runat="server" Value='<%# Bind("ErrorLab") %>'/>
 </ItemTemplate>

我想建议一个答案,command参数不会获取行索引。相反,它将为您提供在gridview数据绑定期间绑定的内容

 protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
    {
      if (e.CommandName == "Select")
      {
        //Do something else
      }
      else if (e.CommandName == "View Cert")
      {
        //The hidden field id is hdnProgramId
        HiddenField hdnProgramId = (((e.CommandSource as LinkButton).Parent.FindControl("hdnProgramId")) as HiddenField);
      }

   }

这将尝试从gridview行上下文中查找隐藏字段。

是否尝试调试并检查“row.Cells[3].Text”返回的值?
 protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
    {
      if (e.CommandName == "Select")
      {
        //Do something else
      }
      else if (e.CommandName == "View Cert")
      {
        //The hidden field id is hdnProgramId
        HiddenField hdnProgramId = (((e.CommandSource as LinkButton).Parent.FindControl("hdnProgramId")) as HiddenField);
      }

   }