如何确定哪个列用户在ASP.NET GridView上单击

时间:2015-11-25 07:03:15

标签: c# asp.net gridview

我使用c#在asp.net中有一个datagridview。我正在使用此代码使行可选:

protected void OnRowDataBound(object sender, System.Web.UI.WebControls.GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        e.Row.Attributes["onclick"] = Page.ClientScript.GetPostBackClientHyperlink(gvTasks, "Select$" + e.Row.RowIndex);
        e.Row.ToolTip = "Click to select this row.";
    }
}

protected void OnSelectedIndexChanged(object sender, EventArgs e)
{
   foreach (GridViewRow row in gvTasks.Rows)
   {
       if (row.RowIndex == gvTasks.SelectedIndex)
       {
           DataTable mydt = new DataTable();
           mydt = (DataTable) Session["dt"];

           Response.Redirect("EditTask.aspx?taskID=" + mydt.Rows[gvTasks.SelectedIndex].ItemArray[0].ToString()
                    + "&agentID=" + mydt.Rows[gvTasks.SelectedIndex].ItemArray[1].ToString());
       }
       else
       {

       }
    }
}

我的挑战是我添加了一个新的数据绑定列,这是我需要用户导航到的链接。由于单击该行将自动转到某个页面(在本例中为“编辑任务”),最终会将您带到“编辑任务”页面,我点击该链接或该行的任何位置。

我需要确定单击了哪个列,这样我就可以添加额外的逻辑,如果它的特定列使用一个url或所有其他列,则使用另一个url。我没有在asp.net datagridview上找到selectedColumn属性。确定选择哪个列的最佳方法是什么。

2 个答案:

答案 0 :(得分:2)

GridView没有允许选择列的内置机制,因此无法使用GridView功能。

一种方法是在用户单击某个字段时在隐藏字段中设置列号,然后在OnSelectedIndexChanged事件中检索此隐藏字段值。

在gridview之外,插入一个新的hiddenField

<asp:hiddenField runat="server" id="hfColumnId" />

单击某行时,请使用JavaScript设置此值:

$('table#XXX td').click(function(){
    var columnId = $(this).parent().children().index($(this));
    $('#hfColumnId').val(columnId);
});

然后在OnSelectedIndexChanged事件中,您可以使用

检索columnId
Int32 columnId = Int32.Parse(this.hfColumnId.Value); 

答案 1 :(得分:0)

我对Stack溢出的第一个回答:也许你需要做的是使用稍微不同的方法。由于您的目标是让用户转到他们从数据网格中单击的链接,您应该在运行时创建一个具有该链接的列。你可以通过2种方式实现,Programmatically或asp。将以编程方式回答

  1. 以编程方式:此代码在绑定网格时开始

    GridView1.DataBind(); //绑定网格视图后,请执行以下操作

        for (int i = 0; i < GridView1.Rows.Count; i++)
        {
    
            HyperLink hlContro = new HyperLink();
            hlContro.NavigateUrl = "./newPage.aspx?ID=" + GridView1.Rows[i].Cells[3].Text; //This is where your url is being kept in the grid
         hlContro.Text = "Click me to go to the link";
           GridView1.Rows[i].Cells[3].Controls.Add(hlContro);//adds the control to the gridview
    
        }
    
  2. 非常感谢那些帮助我解决堆栈溢出问题的人,并帮助我找到了今天我可以帮助你的地方。希望我帮忙。 - Samcima