2015-12-24 44 views
4

我有一個telerik-radgrid,我使用SelectAll。對於SelectAll我使用了複選框。分頁後,檢查的狀態會關閉。 即使在分頁後,我們如何保持複選框的檢查狀態仍可保留。在Telerik RadGrid控件中尋呼時持久化CheckBox狀態

+0

我假設你特別想在分頁時保持用戶的選擇,默認情況下Telerik RadGrid使用Postback。但是,它們應具有Ajax功能,或者您可以將所有選擇保存在頁面事件中。然後定位到上一個或下一個調用的事件。 – Greg

+0

你能提供一個例子嗎?我可能嘗試過類似的東西。 –

回答

4

嗨解決了這一....

呼叫複選框OnCheckedChanged事件 店checkChanged在視圖狀態和項目檢查值databond讀取視圖狀態的值。

在這裏,我們擁有的.cs代碼: -

公共常量字符串SELECTED_CUSTOMERS_INDEX = 「UserIndex」;

protected void CheckChanged(Object sender, System.EventArgs e) 
{ 
    CheckBox box = (CheckBox)sender; 
    GridDataItem item = (GridDataItem)box.NamingContainer; 
    var rowIndex = item.ItemIndex; 
    var idex = radStoreUsers.MasterTableView.DataKeyValues[rowIndex]; 
    string datakey = idex["Id"].ToString(); 
    if (box.Checked) 
    { 
     PersistRowIndex(datakey); 
    } 
    else 
    { 
     RemoveRowIndex(datakey); 
    } 
} 

private void PersistRowIndex(string chkId) 
{ 
    if (!SelectedCustomersIndex.Exists(i => i == chkId)) 
    { 
     SelectedCustomersIndex.Add(chkId); 
    } 
} 

private void RemoveRowIndex(string chkId) 
{ 
    SelectedCustomersIndex.Remove(chkId); 
} 

private List<string> SelectedCustomersIndex 
{ 
    get 
    { 
     if (ViewState[SELECTED_CUSTOMERS_INDEX] == null) 
     { 
      ViewState[SELECTED_CUSTOMERS_INDEX] = new List<string>(); 
     } 

     return (List<string>)ViewState[SELECTED_CUSTOMERS_INDEX]; 
    } 
} 

protected void radStoreUsers_ItemDataBound(object sender, Telerik.Web.UI.GridItemEventArgs e) 
{ 
    if (e.Item is GridDataItem) 
    { 
     GridDataItem item = e.Item as GridDataItem; 
     CheckBox box = (CheckBox)item.FindControl("chkBox"); 
     if (item.OwnerTableView.DataMember == "Users") 
     { 
      if (SelectedCustomersIndex != null) 
      { 
       foreach(string id in SelectedCustomersIndex) 
       { 
        if(item.GetDataKeyValue("Id").ToString() == id) 
        { 
         box.Checked = true; 
        } 
       } 
      } 
     } 
    } 
}