单击网格行时为什么会出现错误的值?

时间:2013-04-25 16:07:48

标签: 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.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>

这里的删除功能应该是

namespace MvcApplication3.Controllers
{
public class TEstController : Controller
{
    //
    // GET: /TEst/

    public ActionResult Index()
    {
        var db = new DataClasses1DataContext();
        var list = from d in db.Orders
                   select d;
        ViewData["list"] = list;
        return View();
    }

    public ActionResult Delete(Object id)
    { 

    // TODO
        // Delete thr user which its id = obj.id ; 

        return View();
    }

}

}

2 个答案:

答案 0 :(得分:0)

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

在模板代码中,您使用ID:

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

请改为:

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

答案 1 :(得分:0)

如果您的需要只是为了获得ID,您应该这样:

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

请注意测试e.Row.DataItem["ProductionOrderId"]值,因为对空对象调用ToString()方法会引发异常。