未触发GridView SelectedIndexChanged事件

时间:2012-12-19 10:48:48

标签: javascript asp.net

当我点击它们时,我希望我的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,或者我对此有误解?

1 个答案:

答案 0 :(得分:4)

您可能在回发时将GridView重新绑定到其DataSource。您应该只使用if(!IsPostBack)(启用ViewState),否则不会触发事件。

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        GridView1.DatSource = GetGataSource();
        GridView1.DataBind();
    }
}

您还应该在每次回发时注册事件处理程序,但仅在数据绑定时调用RowDataBound。因此,请改用RowCreated

最好使用Page.GetPostBackClientHyperlink而不是硬编码javascript函数。

e.Row.Attributes["onclick"] = Page.ClientScript.GetPostBackClientHyperlink((GridView)sender, "Select$" & e.Row.RowIndex)