我希望我的 GridView Rows 在我点击它们时触发 SelectedIndexChanged 事件。
我在后面的代码中尝试了以下内容:
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowIndex != -1)
{
e.Row.Attributes.Add("onMouseOver", "Highlight(this)");
e.Row.Attributes.Add("onMouseOut", "UnHighlight(this)");
e.Row.Attributes.Add("onClick", String.Format("javascript:__doPostBack('GridView1','Select${0}')", e.Row.RowIndex));
}
}
当我单击一行时会发生回发,但它不会触发 SelectedIndexChanged。在 Page_Load 我从请求中获取参数:
if (IsPostBack)
{
object obTarget = this.Request.Form["__EVENTTARGET"]; //GridView1
object obArg = this.Request.Form["__EVENTARGUMENT"]; //Select$4
}
我认为必须提出 SelectedIndexChanged ,或者我对此有误解吗?
最佳答案
您可能在回发时将 GridView 重新绑定(bind)到其数据源。您应该只执行 if(!IsPostBack)
(启用了 ViewState),否则不会触发事件。
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
GridView1.DatSource = GetGataSource();
GridView1.DataBind();
}
}
您还应该在每次回发时注册事件处理程序,但
RowDataBound
仅在数据绑定(bind)时调用。所以改用 RowCreated
。最好使用
Page.GetPostBackClientHyperlink
而不是硬编码 javascript 函数。e.Row.Attributes["onclick"] = Page.ClientScript.GetPostBackClientHyperlink((GridView)sender, "Select$" & e.Row.RowIndex)
关于javascript - GridView SelectedIndexChanged 事件未触发,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13950644/