ASP.NET Gridview行点击

10

我尝试在绑定数据到GridView Web控件后,为行添加一个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);
}
4个回答

11
我在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事件链接起来。然而,第一个问题是它甚至不会在数据绑定上添加属性,我相信我正在使用与你相同的方法。你有看到我的方法和你的方法之间有什么区别吗? - steventnorris
是的,这是一个服务器端的onclick。如果你需要一个JavaScript onclick,我建议你验证一下你的事件(RowDataBound)。你的GridView包含这个事件吗?像这样codegrv.RowDataBound += dataTbl_RowDataBound code?因为这两种方法非常相似。 - Lukinha RS
我感到非常愚蠢。谢谢你指出了显而易见的事情。如果事件甚至不知道该怎么做,很难调用一个方法。 - steventnorris
这种情况经常发生。我们在这里提供帮助。谢谢! :) - Lukinha RS

3
要在jQuery中实现此操作,只需按如下方式获取行单击事件:
$(document).ready(function () {
    var clickCnt = 0;
    $('table tr').click(function(){
        clickCnt++;
        //Do something 
    });
});

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


3

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


而小错误的愚蠢已经显现。我的事件调用出了问题。谢谢。 - steventnorris


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接