2011-12-11 57 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实际上是一个好方法,但是我的问题是我必须坚持不止一个价值,我不知道该怎么做。我的网格视图有一个复选框列,以允许一次选择多行,这就是为什么我需要坚持许多价值。你有什么主意吗? –