获取已在gridview中单击的行

时间:2011-08-17 10:39:55

标签: asp.net

我已经为gridview动态添加了OnClick事件。所以当我点击网格视图中的任何一行时,事件被触发但我无法获得单击的行。 这是我添加事件的代码。

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
    e.Row.Attributes["OnClick"] = Page.ClientScript.GetPostBackClientHyperlink(btnGrid, string.Empty);

}

//这是捕获此事件的代码

protected void GridView1_OnClick(object sender, EventArgs e)
{
    _ID="10" //Static data. I need this from the gridview1.row[ClickedRow].cell[0]
}

3 个答案:

答案 0 :(得分:0)

我担心你必须“手动”分配这个值。

为此,将隐藏的输入元素添加到表单中:

<input type="hidden" name="clicked_row" />

将代码更改为:

e.Row.Attributes["OnClick"] = Page.ClientScript.GetPostBackClientHyperlink(btnGrid, string.Empty) + "; document.forms[0].elements['clicked_row'].value = '" + e.Row.RowIndex + "';";

最后,使用GridView1_OnClick方法从请求中读取索引:

_ID = Int32.Parse(Request.Form["clicked_row"]);

如果每行都有自己的ID更改e.Row.RowIndexe.Row.Id

答案 1 :(得分:0)

我认为,您可以将id / rowindex作为参数传递给GetPostBackClientHyperlink(),并在页面中实现IPostBackEventHandler - 界面。 RaisePostBackEvent()方法将获取id作为传入的输入参数。

我没有对此进行测试,我只是看了MSDN documentation

中的示例

答案 2 :(得分:0)

尝试传入行而不是网格,如下所示:

e.Row.Attributes["OnClick"] = Page.ClientScript.GetPostBackClientHyperlink(e.Row, String.Empty);

在您的事件处理程序中:

protected void GridView1_OnClick(object sender, EventArgs e)
{   
    if (sender is GridViewRow)
    {
         int index = ((GridViewRow)sender).RowIndex;
    }
}

我不是肯定的,但我认为GridView OnClick仍会触发,因为你传递了网格的子元素。