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

时间:2014-09-03 11:03:04

标签: 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")
    {
        int index = Convert.ToInt32(e.CommandArgument);
        GridViewRow row = GridView1.Rows[index];
        errorlab.Text = row.Cells[3].Text;
    }

}

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

3 个答案:

答案 0 :(得分:2)

我想建议一个答案,命令参数不会获取行索引。相反,它将为您提供在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行上下文中找到隐藏字段。

答案 1 :(得分:0)

如果gridview单元格上有更多控件,则必须使用Controls属性

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

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

中控件的位置

答案 2 :(得分:0)

总是尽量避免在gridview中通过它的索引位置来引用单元格,因为如果您将来在网格中添加/删除更多列可能会导致意外结果,则可能会导致更改代码。另请注意,hiddenfield没有Text属性,而是Value属性可以访问它的值。

如果您知道隐藏字段的名称,那么最好尝试通过它的名称访问它。我们假设您在gridview中将隐藏字段定义如下

 <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;