我已经为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]
}
答案 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.RowIndex
到e.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仍会触发,因为你传递了网格的子元素。