Search code examples
c#asp.nettelerik-grid

Persisting CheckBox State While Paging in Telerik RadGrid Control


I have a telerik-radgrid where I use SelectAll. For SelectAll I have used checkbox. The checked status is going off after paging. How can we persist the checked status of Checkbox can retained even after paging.


Solution

  • Hi Solved this one....

    call checkChanged in checkbox OnCheckedChanged event store checked value in viewstate and on item databond read the value of viewstate.

    And here we have .cs code:-

    public const string 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;
                        }
                    }
                }
            }
        }
    }