3

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を上げる必要があると思いますか、それともこれについて誤解がありますか?

4

1 に答える 1

4

おそらく、ポストバック時にGridViewをそのデータソースに再バインドしています。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) 
于 2012-12-19T10:53:24.860 に答える