2

首先,我是一个新的 C# 开发人员,我需要一些帮助,我的 aspx 文件中有一个带有 SqlDataSource 的网格视图,其中包含 3 列 ID/Name/Job 和几条记录(行)。当用户选择一行时,我想重定向到另一个页面并将该行的选定 ID 的值作为参数传递。用户每次只能选择一行。我花了几个小时在上面,但是发生了一些奇怪的事情。

我有一个方法

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
    {
       string selectedID;

        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            GridViewRow gvr = e.Row;
            selectedID = (GridView1.DataKeys[e.Row.RowIndex].Value.ToString());
            gvr.Attributes.Add("OnClick","javascript:location.href='Views/EditMenus/EditCompany.aspx?id=" + selectedID + "'");

            gvr.Attributes.Add("onmouseover", "this.style.backgroundColor='#FFE6E6'");
            gvr.Attributes.Add("onmouseout", "this.style.backgroundColor=''");
            gvr.Attributes.Add("style", "cursor:pointer;");

            Session["IDs"] = selectedID;
     } }

在我的重定向页面中,我在页面加载方法中有以下代码:

 protected void Page_Load(object sender, EventArgs e)
    {
          if (Session["IDs"] != null)
        {            
            Label2.Text = "Selected ID is: "+ Session["IDs"].ToString();
         }
    }

现在,当我选择一行时,重定向到其他页面正常工作,并且浏览器 url 根据上面的 javascript 代码具有所选 ID 的正确值,但是 Label2.Text 打印错误的 ID。它打印每页最后一行的值 ID,而不是所选 ID 的值。为什么会这样?

这对我来说有点奇怪,因为我对这两种情况都使用了相同的变量“selectedID”,正如你在上面看到的那样。

4

1 回答 1

1

您需要在您的事件发生时减轻您的IDinSession变量的价值SelectedIndexChangedGridView

void CustomersGridView_SelectedIndexChanging(Object sender, GridViewSelectEventArgs e)
  {

    // Get the currently selected row.
    //Because the SelectedIndexChanging event occurs  before the select operation
    //in the GridView control, the SelectedRow property cannot be used.
    //Instead, use the Rows collection
    //and the NewSelectedIndex property of the 
    //e argument passed to this event handler.

    GridViewRow row = CustomersGridView.Rows[e.NewSelectedIndex];

    //Cells[0] is for first column so assign according to your column for ID
    Session["IDs"]=row.Cells[0].Text;


  }
于 2012-11-09T08:54:18.060 回答