2012-12-19 250 views
3

我希望我的GridView行在點擊它們時觸發SelectedIndexChanged事件。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

你可能正在重新綁定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) 
+0

替換硬編碼的javascript已經解決了這個問題,非常感謝。不同之處在於__EVENTTARGET獲得了「ctl00 $ MainContent $ GridView1」的值,而不是像「硬編碼版本」那樣的「GridView1」 – jannagy02

相關問題