【问题标题】:ASP.NET gridview row onclickASP.NET gridview 行 onclick
【发布时间】:2012-03-17 03:54:57
【问题描述】:

一旦数据绑定到gridview webcontrol,我正在尝试将onclick 事件添加到一行。下面的代码没有添加任何属性(创建页面后检查视图源),当然也没有添加任何功能。现在,我刚刚将 onclick 打印到页面,但最终它将链接到另一个页面。有什么想法吗?

另外,感谢整个 stackoverflow 社区。这个社区一直是一个很大的帮助。计划在这个周末自己浏览一些帖子并开始回答问题以回馈一些。

C# 服务器端

protected void dataTbl_RowDataBound(GridViewRowEventArgs e){
            e.Row.Attributes.Add("id",e.Row.Cells[0].Text);
            e.Row.Attributes.Add("onclick", "rowClick('"+e.Row.RowIndex+"')");

        }

Javascript 客户端

function rowClicked(counter){
    document.write(counter);
}

【问题讨论】:

    标签: c# javascript asp.net gridview onclick


    【解决方案1】:

    我在我的 GridView 的 RowDataBound 中使用它来添加属性以选择行:

    protected void grvSearch_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        try
        {
            switch (e.Row.RowType)
            {
                case DataControlRowType.Header:
                    //...
                    break;
                case DataControlRowType.DataRow:
                    e.Row.Attributes.Add("onmouseover", "this.style.backgroundColor='#93A3B0'; this.style.color='White'; this.style.cursor='pointer'");
                    if (e.Row.RowState == DataControlRowState.Alternate)
                    {
                        e.Row.Attributes.Add("onmouseout", String.Format("this.style.color='Black';this.style.backgroundColor='{0}';", grvSearch.AlternatingRowStyle.BackColor.ToKnownColor()));
                    }
                    else
                    {
                        e.Row.Attributes.Add("onmouseout", String.Format("this.style.color='Black';this.style.backgroundColor='{0}';", grvSearch.RowStyle.BackColor.ToKnownColor()));
                    }
                    e.Row.Attributes.Add("onclick", Page.ClientScript.GetPostBackEventReference(grvSearch, "Select$" + e.Row.RowIndex.ToString()));
                    break;
            }
        }
        catch 
        {
            //...throw
        }
    }
    

    这会在用户单击该行时捕获事件:

    protected void grvSearch_SelectedIndexChanged(object sender, EventArgs e)
    {
        try
        {
            //Do wherever you want with grvSearch.SelectedIndex                
        }
        catch
        {
            //...throw
        }
    }
    

    【讨论】:

    • 看起来您正在使用 onclick 事件服务器端。我正在将一个 javascript 方法与我的 onclick 事件联系起来。不过,第一个问题是它甚至没有在数据绑定上添加属性,我相信我正在使用与您相同的方法。你发现我的方法和你的方法有什么不同吗?
    • 是的,它是一个服务器端的点击。如果您需要 javascript onclick,我建议您验证您的事件 (RowDataBound)。您的 GridView 包含事件? codegrv.RowDataBound += dataTbl_RowDataBound code 之类的东西?因为这两种方法非常相似。
    • ...我觉得很傻。谢谢你指出显而易见的。如果事件甚至不知道这样做,很难调用方法。
    • 它发生了。我们是来帮忙的。谢谢! :)
    【解决方案2】:

    要在 jQuery 中执行此操作,只需像这样获取行点击事件:

    $(document).ready(function () {
        var clickCnt = 0;
        $('table tr').click(function(){
            clickCnt++;
            //Do something 
        });
    });
    

    因此,我建议将 TR ID 设置为行中显示的对象的主键。

    【讨论】:

      【解决方案3】:

      Grid 是否设置为调用dataTbl_RowDataBound 事件?如果您在该事件中使用断点进行调试,该事件会被触发吗?

      【讨论】:

      • 而且犯了小错误的愚蠢。我的活动电话有问题。谢谢。
      【解决方案4】:

      如果它不起作用,您可以使用 rowcommand 事件。 http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.gridview.rowcommand.aspx

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-07-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-08-08
        • 1970-01-01
        相关资源
        最近更新 更多