C# 为什么单击网格行时会得到错误的值?
我试图选择一个GridView行,并将其id保存到一个变量,然后在超链接中使用此id删除该行 问题是id始终为9,即使没有单击任何行 代码如下: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
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();