C# 为什么单击网格行时会得到错误的值?

C# 为什么单击网格行时会得到错误的值?,c#,asp.net,gridview,C#,Asp.net,Gridview,我试图选择一个GridView行,并将其id保存到一个变量,然后在超链接中使用此id删除该行 问题是id始终为9,即使没有单击任何行 代码如下: string id; protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) { if (e.Row.RowType == DataControlRowType.DataRow) { e.Row.Attri

我试图选择一个GridView行,并将其id保存到一个变量,然后在超链接中使用此id删除该行

问题是id始终为9,即使没有单击任何行

代码如下:

 string id;

  protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
  {
     if (e.Row.RowType == DataControlRowType.DataRow)
     {
         e.Row.Attributes.Add(
             "onmouseover",
             "this.style.cursor='Pointer';this.style.backgroundColor='Yellow'");
         e.Row.RowIndex.ToString())); 

         id = DataBinder.Eval(e.Row.DataItem, "ProductionOrderId").ToString();
     }
  }
这是超链接代码

<a href='<%=ResolveUrl("~/Producter/Delete?id=" + id) %>' ID="HyperLink1">Delete</a>

}

好的,试试这个,摆脱这个事件,你不需要做任何特殊的事情,因为在这种情况下,你只需要它访问ID值

在模板代码中,使用ID的位置:

<a href='<%=ResolveUrl("~/Producter/Delete?id=" + id) %>' ID="HyperLink1">Delete</a>

改为这样做:

<a href='<%=ResolveUrl("~/Producter/Delete?id=" + Eval("ProductionOrderId")) %>'>Delete</a>

如果您只需要获取id,则应按如下方式获取:

id = e.Row.DataItem["ProductionOrderId"].ToString();

小心测试
e.Row.DataItem[“ProductionOrderId”]
值,因为对null对象调用
ToString()
方法会引发异常。

看起来字符串id被重复设置,只保留最终值,但代码被编辑了几次。这是你现在使用的代码吗?这是我使用的代码。你是对的,我的GridView中有9行。你需要在视图中获取行ID,而不是向前传递。每次绑定一行时,它都会覆盖以前的值。我不记得怎么做了,但是你不需要OnRowDataBound事件,你应该能够在没有
DataBinder.Eval
调用的情况下获取行的ID,只需访问超链接代码中的属性(代替现在使用的
ID
变量),请记住怎么做,或者给出任何提示,您可以将ResolveUrl代码设置为错误的数据绑定方法,如Eval()、XPath()和Bind()只能在数据绑定控件的上下文中使用。数据绑定方法,如Eval()、XPath()和Bind()只能在数据绑定控件的上下文中使用。对,您的模板应该在这样的上下文中,不是吗?实际的超链接代码在哪里?如果您使用标记创建视图,则在
元素中,如果我没有记错,它将是一个
元素,带有
。无法将带[]的索引应用于此表达式
id = e.Row.DataItem["ProductionOrderId"].ToString();