在GridView中OnRowClick没有接管按钮点击?

时间:2011-08-05 16:09:19

标签: c# asp.net gridview onclick

我有一个包含在UserControl中的C#/ ASP.net GridView。我现在拥有它的方式,gridview将添加一个onrowclick属性,如下所示:

protected void _gridView_RowDataBound(object sender, GridViewRowEventArgs e)
{
  e.Row.Attributes["onclick"] = Page.ClientScript.GetPostBackClientHyperlink(this.GridView, "EditRow$" + e.Row.RowIndex);
}

但是,当发生此单击事件时,由于EventValidation,我收到无效的回发错误。此外,我在行上的按钮使用GridViewRowCommands重定向到其他页面。不幸的是,我无法让两者一起工作(RowCommand函数永远不会运行)。

例如,这是我将使用的处理程序:

protected void _gridView_RowCommand(object sender, GridViewCommandEventArgs e)
{
   if (e.CommandName.ToString() == "EditRow" && e.CommandArgument.ToString() == "0")
      Response.Redirect(anotherURL);
   if (e.CommandName.ToString() == "BACK" && e.CommandArgument.ToString() == "0")
      Response.Redirect(thisURL);
}

这是我在行上使用的按钮:

<asp:Button ID="_AddButton" runat="server" CommandName="BACK" CommandArgument="0" Text="Add" />

理想情况下,row-onclick也将使用此GridViewRowCommands,因此我可以在一个地方处理重定向。但是,我不知道该怎么做。有关更好方法的任何建议吗?

感谢您的继续支持!

3 个答案:

答案 0 :(得分:0)

我不确定如何添加评论,所以答案必须这样做。

你是说它没有按照RowCommand方法发生什么?如果不是,我会考虑通过Page Init。以下列方式连接事件。

GridView1.OnRowCommand += _gridView_RowCommand

答案 1 :(得分:0)

在page指令中,添加以下内容:

EnableEventValidation="false";

之后应该可以正常工作。这可能是解决问题的最简单方法。

您也可以这样做:

e.Row.Attributes["onclick"] = "javascript:onRowClick('" + e.Row.RowIndex + "');";

在ASPX中,添加一个JavaScript函数:

onRowClick = function(rowIndex){
   __doPostBack("<%=dataGridView1.UniqueID%>", rowIndex);
}

最后,在你的代码中,添加RaisePostBackEvent覆盖:

protected override void RaisePostBackEvent(IPostBackEventHandler source, string eventArgument)
{
    base.RaisePostBackEvent(source, eventArgument);

    int rowIndex = ToInt32.Parse(eventArgument);
    if (source is DataGridView)
    {
        if (source == dataGridView1)
        {
             GridViewRow row = dataGridView1.Rows[rowIndex];
        }
    }
}

答案 2 :(得分:0)

我通过在每一行附加客户端点击事件来处理类似的问题。

  1. 将OnRowDataBound事件处理程序添加到网格视图。

    OnRowDataBound="GridView_RowDataBound
    
  2. 在OnRowDataBound事件处理程序中,添加一个“onclick”属性,该属性抓取记录的主键并在重定向URL中传递它。

    protected void GridView_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            int id = Convert.ToInt32(e.Row.Cells[0].Text);
            e.Row.Attributes["onclick"] = string.Format("javascript: window.location = 'Edit.aspx?id={0}'", id);
        }
    }
    
  3. 请注意,这假设您的网格视图的第一列是您的主键。