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

本文关键字:获取 隐藏 字段 Gridview RowCommand 事件 | 更新日期: 2023-09-27 18:20:25

如果我在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标签没有显示任何内容。也许我错过了什么。

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

我想建议一个答案,命令参数不会为您获取行索引。相反,它将为您提供在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单元格上有其他控件,则必须使用controls属性访问它们

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

您必须为控件使用正确的索引。调试代码并检查控件在行中的位置。细胞[3]。对照。

始终尽量避免通过单元格在网格视图中的索引位置引用单元格,因为如果将来碰巧在网格中添加/删除更多列,可能会导致代码更改,从而导致不希望的结果。还要注意,hiddenfield没有Text属性,而是有一个Value属性来访问它的值。

如果你知道隐藏字段的名称,那么最好试着用它的名称访问它。假设你的隐藏字段在你的网格视图中定义如下

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

然后在你的GridView1_RowCommand中,你可以进行

int index = Convert.ToInt32(e.CommandArgument);
GridViewRow row = GridView1.Rows[index];
HiddenField hdnField = (HiddenField)row.FindControl("hdnField");
errorlab.Text = hdnField.Value;