【问题标题】:GridView SelectedIndexChanged Event is not firedGridView SelectedIndexChanged 事件未触发
【发布时间】:2012-12-19 10:48:47
【问题描述】:

我希望我的 GridView 行在我单击它们时触发 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,还是我对此有误解?

【问题讨论】:

    标签: javascript asp.net


    【解决方案1】:

    您可能在回发时将 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) 
    

    【讨论】:

    • 替换硬编码的javascript已经解决了这个问题,非常感谢。不同之处在于,__EVENTTARGET 获得了“ctl00$MainContent$GridView1”的值,而不是硬编码版本中的“GridView1”
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-21
    • 1970-01-01
    • 1970-01-01
    • 2023-03-15
    • 1970-01-01
    相关资源
    最近更新 更多