2011-12-11 40 views
2

我有一個GridView,我通過列表填充它。其中一列是DropDownList,AllowPaging設置爲true。我的問題是,當我在ddl上選擇一個值,並在分頁後,選定的值丟失。是否有任何方法/想法來堅持選定的值? 感謝您的幫助。在頁面上堅持dropdownlist

回答

1

你可以使用視圖狀態內的字典對象保存多個值即

Dictionary<int, string> ddlValues = new Dictionary<int, string>() 

其中int是行索引和字符串是DDL選擇的值。當然,這可能是一個int/guid或其他什麼取決於ddl中存儲的實際值,或者是一個int,如果你想使用selectedIndex來代替。

頁面上的事件中,你需要做的

protected void MyGridView_PageIndexChanging(Object sender, GridViewPageEventArgs e) 
{ 
    for(int rowIndex = 0; rowIndex < myGridView.Rows.Length; rowIndex++) 
    { 
     DropdownList ddl = myGridView.Rows[rowIndex].FindControl("ddlId") as DropDownList 

    if(ddl != null) 
     { 
      if(ddl.SelectedIndex > 0) //.. or sensible check appropriate to you 
      { 
       int ddlIndex = rowIndex * e.NewPageIndex + 1; 

       //.. add pageIndex and selectedValue to dictionary 
       ddlValues.Add(ddlIndex, ddl.SelectedValue); 

      } 

     } 
    } 
} 

不要擔心當前頁面DDL值。這些將以正常的方式持續在視圖狀態。這是我們所考慮的「隱藏」頁面。因此,我們正在重新填充網格頁面時的字典。

該字典然後可以保存在session/viewState中,並通過反向執行該過程用於補充下拉列表。例如,當頁面加載(檢查!isPostBack)或當電網重新綁定取決於你設置的東西

+0

我收到字典中的值,但如何重新填充下拉列表中的相同的值..我問** [問題在這裏..!](http://stackoverflow.com/questions/22830180/persisting-dropdownlist- value-in-pageindexchanged-of-gridview)**請幫助我 –

0

您可能希望將數據保存在ViewState中。看看這個MSDN文章

http://msdn.microsoft.com/en-us/library/ms972976.aspx

後您將其保存在ViewState中,你可以檢索PostBack這樣的數據:

if (!Page.IsPostBack) 
     { 
      //do some stuff 
     } 
     else 
     { 
      //retrieve the viewstate information 
       selectedValue= ViewState["dropdownlistValue"].ToString(); 

     } 

或者,你也可以保持在一個Session信息可變的,但可能會引入其他問題取決於你在做什麼。

+0

謝謝Rondel的回覆。爲了節省ViewState實際上是一個好方法,但是我的問題是我必須堅持不止一個價值,我不知道該怎麼做。我的網格視圖有一個複選框列,以允許一次選擇多行,這就是爲什麼我需要堅持許多價值。你有什麼主意嗎? –