This is a migrated thread and some comments may be shown as answers.

[Solved] Row Selection information is lost on Columns Reordering in RadGrid

1 Answer 194 Views
Grid
This is a migrated thread and some comments may be shown as answers.
Satyaprakash J
Top achievements
Rank 1
Satyaprakash J asked on 17 Dec 2009, 04:07 AM
Hi,
      I am using a RadGrid which has a GridClientSelectColumn. When user selects some rows and does a column reorder, the selected rows become unselected. Why is this happening?  I've set EnableViewState=true.

I've also tried saving the selected rows information in ViewState in the OnColumnsReorder eventhandler. I am retrieving this selected rows information from the ViewState in the Page_Prerender function and setting it. But still selected rows become unselected on columns reorder.

I've attached the aspx page and code behind. Please let me know if I am missing something.

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Questions.aspx.cs" Inherits="DiscussionForumTelerikUI.Questions" EnableEventValidation="false" %> 
 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
 
<html xmlns="http://www.w3.org/1999/xhtml" > 
<head runat="server">  
<script language="javascript" type="text/javascript" > 
    function RowClick(sender, eventArgs) {  
        <!--alert("Index of clicked row is " + eventArgs.get_itemIndexHierarchical());--> 
        var grid = sender;  
        var MasterTable = grid.get_masterTableView();  
          
        var row = MasterTable.get_dataItems()[eventArgs.get_itemIndexHierarchical()];  
        var idCell = MasterTable.getCellByColumnUniqueName(row, "Id");  
        var tagCell = MasterTable.getCellByColumnUniqueName(row, "TagName");  
        var id = idCell.innerHTML;  
        var tag = tagCell.innerHTML;  
        window.location = "Login.aspx?id=" + id + "&" + "tag=" + tag;  
 
    
    }  
      
    function HandleHeaderContextMenu(sender, eventArgs)  
    {  
        var items = eventArgs.get_menu().findItemByText("Columns").get_items();  
        items._array[0].set_visible(false);  
          
    }  
      
    function GridDestroying(sender, args)  
    {  
          
          
        var theForm = document.forms['form1'];  
        if (!theForm) {  
            theForm = document.form1;  
        }  
 
          
        var grid = sender;  
        var MasterTable = grid.get_masterTableView();  
          
          
        var row = MasterTable.get_dataItems()[0];  
        var idCell = MasterTable.getCellByColumnUniqueName(row, "Id");  
        var tagCell = MasterTable.getCellByColumnUniqueName(row, "TagName");  
        var id = idCell.innerHTML;  
        var tag = tagCell.innerHTML;  
        //__doPostBack(theForm.__EVENTTARGET.value, '');  
        //location.reload(true);  
    }      
      
    function TableDestroying(sender, args)  
    {  
        alert("Table Destroying");  
    }  
      
    function HandlePageEvent(sender, args)  
    {  
        var saveControl = document.getElementById('linkButtonSave');  
        if(saveControl != null)  
        {  
              
            saveControl.removeAttribute("disabled");  
             var theForm = document.forms['form1'];  
        if (!theForm) {  
            theForm = document.form1;  
        }  
        __doPostBack(theForm.__EVENTTARGET.value, '');  
        }  
         
    }  
      
      
</script> 
    <title>Questions</title> 
    <style type="text/css">  
        .container  
        {  
            margin-top: 158px;  
        }  
    </style> 
    </head> 
<body style="background-color: #FFFFFF">  
    <form id="form1" runat="server">  
    <div class="container">  
      
         <div class="logo-container">  
            <img src="images/Logo.jpg" alt="Logo"/>  
         </div> 
         <div class="company-name-container">Stira Technologies</div> 
         <div class="forum-name-container">Technical Discussion Forum</div> 
           
         <div class="go-button-container">   
            <asp:Button Text="Go" runat="server" OnClick="searchButton_Click" ID="searchButton" />   
         </div> 
         <div class="search-textbox-container">  
            <asp:TextBox runat="server" ID="searchTextBox"></asp:TextBox> 
             <br /> 
          </div> 
          <div class="search-text-container">Search</div> 
          <div class="link-button-container">  
             <asp:HyperLink ID="HyperLink1" runat="server" NavigateUrl="~/AddQuestion.aspx">Ask Question</asp:HyperLink> 
              <br /> 
         </div> 
         <div class="welcome-message-container">Welcome</div> 
       </div> 
       <div class="span-24">  
            <br /> 
            <telerik:RadGrid ID="questionsRadGrid" runat="server" AllowPaging="True"   
                AllowSorting="True" GridLines="None" Skin="Telerik" PageSize="20"   
                Font-Names="Calibri" Font-Size="Large"   
                     OnDetailTableDataBind="questionsRadGrid_DetailTableDataBind"   
                     OnNeedDataSource="questionsRadGrid_NeedDataSource" EnableViewState="true" OnColumnsReorder="questionsRadGrid_ColumnsReordered">   
                     
            <MasterTableView> 
            <RowIndicatorColumn> 
            <HeaderStyle Width="20px"></HeaderStyle> 
            </RowIndicatorColumn> 
 
            <ExpandCollapseColumn> 
            <HeaderStyle Width="20px"></HeaderStyle> 
            </ExpandCollapseColumn> 
            </MasterTableView> 
 
                   <ClientSettings AllowColumnsReorder="True">  
                    <ClientEvents OnRowClick="RowClick" OnHeaderMenuShowing="HandleHeaderContextMenu"/>  
                      
                        <Selecting AllowRowSelect="True" /> 
                          
                    </ClientSettings> 
                      
                </telerik:RadGrid> 
      
      </div>     
      
     
      
    <%--<telerik:RadAjaxManager ID="RadAjaxManager1" runat="server">  
            <AjaxSettings> 
                <telerik:AjaxSetting AjaxControlID="questionsRadGrid">  
                    <UpdatedControls> 
                        <telerik:AjaxUpdatedControl ControlID="questionsRadGrid" /> 
                    </UpdatedControls> 
                </telerik:AjaxSetting> 
            </AjaxSettings> 
        </telerik:RadAjaxManager>--%> 
 
            <telerik:RadScriptManager ID="RadScriptManager1" Runat="server">  
            </telerik:RadScriptManager> 
 
    </form> 
</body> 
</html> 
using System;  
using System.Collections.Generic;  
using System.Collections;  
using System.Linq;  
using System.Web;  
using System.Web.UI;  
using System.Web.UI.WebControls;  
using System.ServiceModel.Web;  
using System.ServiceModel;  
using Microsoft.ServiceModel.Web;  
using Microsoft.Http;  
using Microsoft.Http.Headers;  
using System.Xml.Serialization;  
using System.Runtime.Serialization.Json;  
using DiscussionForum.Library;  
using Telerik.Web.UI;  
 
namespace DiscussionForumTelerikUI  
{  
    public partial class Questions : System.Web.UI.Page  
    {  
 
 
        protected void Page_Load(object sender, EventArgs e)  
        {  
            if (!Page.IsPostBack)  
            {  
 
 
                questionsRadGrid.AutoGenerateColumns = false;  
 
                questionsRadGrid.MasterTableView.DataKeyNames = new string[] { "Id""TagName" };  
 
                questionsRadGrid.MasterTableView.EnableHeaderContextMenu = true;  
 
                questionsRadGrid.AllowMultiRowSelection = true;  
                questionsRadGrid.ClientSettings.Selecting.AllowRowSelect = true;  
 
 
                GridClientSelectColumn selectColumn = new GridClientSelectColumn();  
                questionsRadGrid.MasterTableView.Columns.Add(selectColumn);  
                selectColumn.Visible = true;  
                selectColumn.UniqueName = "Select";  
 
                GridBoundColumn subjectColumn = new GridBoundColumn();  
                questionsRadGrid.MasterTableView.Columns.Add(subjectColumn);  
                subjectColumn.DataField = "Subject";  
                subjectColumn.HeaderText = "Subject";  
                subjectColumn.UniqueName = "Subject";  
 
                GridBoundColumn descriptionColumn = new GridBoundColumn();  
                questionsRadGrid.MasterTableView.Columns.Add(descriptionColumn);  
                descriptionColumn.DataField = "Description";  
                descriptionColumn.HeaderText = "Description";  
                descriptionColumn.UniqueName = "Description";  
 
                GridBoundColumn createDateTimeColumn = new GridBoundColumn();  
                questionsRadGrid.MasterTableView.Columns.Add(createDateTimeColumn);  
                createDateTimeColumn.DataField = "CreateDateTime";  
                createDateTimeColumn.HeaderText = "Created Date Time";  
                createDateTimeColumn.UniqueName = "CreateDateTime";  
 
                GridBoundColumn userNameColumn = new GridBoundColumn();  
                questionsRadGrid.MasterTableView.Columns.Add(userNameColumn);  
                userNameColumn.DataField = "UserName";  
                userNameColumn.HeaderText = "User Name";  
                userNameColumn.UniqueName = "UserName";  
 
 
                GridBoundColumn tagNameColumn = new GridBoundColumn();  
                questionsRadGrid.MasterTableView.Columns.Add(tagNameColumn);  
                tagNameColumn.DataField = "TagName";  
                tagNameColumn.HeaderText = "Tag Name";  
                tagNameColumn.UniqueName = "TagName";  
 
 
                GridBoundColumn idColumn = new GridBoundColumn();  
                questionsRadGrid.MasterTableView.Columns.Add(idColumn);  
                idColumn.DataField = "Id";  
                idColumn.HeaderText = "Id";  
                idColumn.UniqueName = "Id";  
 
                //Create the detail table  
                GridTableView gridTableView = new GridTableView(questionsRadGrid);  
 
                questionsRadGrid.MasterTableView.DetailTables.Add(gridTableView);  
 
                GridRelationFields gridRelationFields = new GridRelationFields();  
                gridTableView.ParentTableRelation.Add(gridRelationFields);  
                gridRelationFields.MasterKeyField = "Id";  
                gridRelationFields.DetailKeyField = "QuestionId";  
 
                gridTableView.AutoGenerateColumns = false;  
                gridTableView.Width = Unit.Percentage(100);  
 
                GridBoundColumn answerColumn = new GridBoundColumn();  
                gridTableView.Columns.Add(answerColumn);  
                answerColumn.DataField = "Description";  
                answerColumn.HeaderText = "Answer";  
                answerColumn.UniqueName = "Answer";  
 
                GridBoundColumn userNameColumn1 = new GridBoundColumn();  
                gridTableView.Columns.Add(userNameColumn1);  
                userNameColumn1.DataField = "UserName";  
                userNameColumn1.HeaderText = "User Name";  
                userNameColumn1.UniqueName = "UserName";  
 
                GridBoundColumn tagColumn = new GridBoundColumn();  
                gridTableView.Columns.Add(tagColumn);  
                tagColumn.DataField = "TagName";  
                tagColumn.HeaderText = "Tag Name";  
                tagColumn.UniqueName = "TagName";  
                tagColumn.Visible = false;  
 
                GridBoundColumn createdDateTimeColumn = new GridBoundColumn();  
                gridTableView.Columns.Add(createdDateTimeColumn);  
                createdDateTimeColumn.DataField = "CreatedDateTime";  
                createdDateTimeColumn.HeaderText = "Created DateTime";  
                createdDateTimeColumn.UniqueName = "CreatedDateTime";  
 
 
                GridBoundColumn questionIdColumn = new GridBoundColumn();  
                gridTableView.Columns.Add(questionIdColumn);  
                questionIdColumn.DataField = "QuestionId";  
                questionIdColumn.HeaderText = "Question Id";  
                questionIdColumn.UniqueName = "QuestionId";  
                questionIdColumn.Visible = false;  
 
            }  
 
 
 
        }  
 
        protected void Page_Prerender(object sender, EventArgs e)  
        {  
            ArrayList selectedItemsList = (ArrayList)ViewState["Selected Rows"];  
 
            if (selectedItemsList != null)  
            {  
                foreach (GridDataItem item in questionsRadGrid.MasterTableView.Items)  
                {  
                    if (selectedItemsList.Contains(item["Id"].Text))  
                    {  
                        item.Selected = true;  
                    }  
                }  
            }  
        }  
        protected void exportButton_Click(object sender, EventArgs e)  
        {  
            questionsRadGrid.ExportSettings.OpenInNewWindow = true;  
            questionsRadGrid.ExportSettings.FileName = "Export";  
            questionsRadGrid.MasterTableView.ExportToExcel();  
        }  
 
        protected void questionsRadGrid_NeedDataSource(object source, Telerik.Web.UI.GridNeedDataSourceEventArgs e)  
        {  
            if (!e.IsFromDetailTable)  
            {  
                HttpClient client = new HttpClient();  
                HttpResponseMessage response = client.Get(new Uri("http://localhost/QuestionService/Service.svc/"));  
                response.Content.LoadIntoBuffer();  
 
                QuestionCollection questionCollection = response.Content.ReadAsXmlSerializable<QuestionCollection>();  
                questionsRadGrid.DataSource = questionCollection;  
 
            }  
        }  
 
 
        protected void questionsRadGrid_DetailTableDataBind(object source, Telerik.Web.UI.GridDetailTableDataBindEventArgs e)  
        {  
            GridDataItem dataItem = (GridDataItem)e.DetailTableView.ParentItem;  
 
            string questionId = dataItem.GetDataKeyValue("Id").ToString();  
            string tagName = dataItem.GetDataKeyValue("TagName").ToString();  
 
            HttpClient client1 = new HttpClient();  
            HttpResponseMessage response1 = client1.Get(new Uri("http://localhost/AnswerService/Service.svc/" + questionId));  
            response1.Content.LoadIntoBuffer();  
 
            AnswerCollection answerCollection = response1.Content.ReadAsXmlSerializable<AnswerCollection>();  
 
            foreach (Answer answer in answerCollection)  
            {  
                answer.TagName = tagName;  
                answer.QuestionId = questionId;  
            }  
 
 
            e.DetailTableView.DataSource = answerCollection;  
 
 
        }  
 
        protected void searchButton_Click(object sender, EventArgs e)  
        {  
            Response.Redirect("SearchResults.aspx?q=" + searchTextBox.Text);  
        }  
 
        protected void questionsRadGrid_ColumnsReordered(object sender, GridColumnsReorderEventArgs e)  
        {  
            ArrayList gridSelectedItemsList = new ArrayList();  
 
 
            foreach (GridDataItem item in questionsRadGrid.MasterTableView.Items)  
            {  
                if (item.Selected)  
                {  
                    gridSelectedItemsList.Add(item["Id"].Text);  
                }  
 
            }  
 
            ViewState["Selected Rows"] = gridSelectedItemsList;  
        }  
 
    }  
}  
 

Thanks
Satyaprakash J

1 Answer, 1 is accepted

Sort by
0
Pavlina
Telerik team
answered on 18 Dec 2009, 08:25 AM
Hi Satyaprakash,

RadGrid loses its current selection when the current page changes. Please refer to the following help articles to find out how to avoid this behavior:
Persisting the selected rows client-side on sorting/paging/filtering/grouping
Persisting the selected rows server-side on sorting/paging/filtering/grouping

I hope this information helps. Let me know if you need additional assistance.

All the best,
Pavlina
the Telerik team

Instantly find answers to your questions on the new Telerik Support Portal.
Watch a video on how to optimize your support resource searches and check out more tips on the blogs.
Tags
Grid
Asked by
Satyaprakash J
Top achievements
Rank 1
Answers by
Pavlina
Telerik team
Share this question
or