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

Customer (RadGrid) user control in a RadRotator : Invalid JSON primitive

1 Answer 82 Views
Grid
This is a migrated thread and some comments may be shown as answers.
Aarsh
Top achievements
Rank 1
Aarsh asked on 12 Nov 2012, 09:18 PM
Basically i am using a custom user control named DashboardGrid. We can specify database name adn query in it and the grid gets populated.

.ascx
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="DashBoardGrid.ascx.cs"
    Inherits="WebUserControlTest.WebUserControl1" %>
 
 
<script type="text/javascript">
    function pageLoad(sender, eventArgs)
    {
 
 
    }
</script>
 
<telerik:RadGrid ID="DashboardGrid" runat="server" PageSize="8" AllowPaging="true" Width="60%"
    PagerStyle-AlwaysVisible="false" AllowFilteringByColumn="True" AllowSorting="True" OnNeedDataSource="DashGrid_NeedDataSource"
    CellSpacing="1" OnPageIndexChanged="DashboardGrid_PagingCommand" GridLines="None"
    OnSortCommand="DashboardGrid_SortCommand" PagerStyle-Mode="NextPrev" ClientIDMode="Static"
    GroupingEnabled="False" OnSelectedCellChanged="DashboardGrid_SelectedCellChanged1" PagerStyle-HorizontalAlign="Center" PagerStyle-VerticalAlign="Middle" SelectedItemStyle-VerticalAlign="Top" MasterTableView-PageSize="8">
    <MasterTableView AllowMultiColumnSorting="true" TableLayout="Fixed">
        <CommandItemSettings ExportToPdfText="Export to PDF"></CommandItemSettings>
        <RowIndicatorColumn Visible="True" FilterControlAltText="Filter RowIndicator column">
        </RowIndicatorColumn>
        <ExpandCollapseColumn Visible="True" FilterControlAltText="Filter ExpandColumn column">
        </ExpandCollapseColumn>
        <EditFormSettings>
            <EditColumn FilterControlAltText="Filter EditCommandColumn column">
            </EditColumn>
        </EditFormSettings>
    </MasterTableView>
    <ClientSettings>
        <Selecting AllowRowSelect="true" />
    </ClientSettings>
    <FilterMenu EnableImageSprites="False">
    </FilterMenu>
</telerik:RadGrid>

the code behind has following important method (I can not post the whole code but trying post just the relevant)
C# code behind (.ascx.cs)

string QueryOrStoredProcedure, bool HasStoredProcedure and int DatabaseEnum are public properties (of the custom user
control)

PAGE_LOAD :

        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                LoadData();
                //DashboardGrid.ClientSettings.DataBinding.EnableCaching = true;
                DashboardGrid.DataBind();
            }
        }


string ConnectionString = string.Empty;
           string SelectQuery = string.Empty;
           if (!HasStoredProcedure)
               SelectQuery = QueryOrStoredProcedure;
 
           ConnectionStringSettingsCollection ConnctionStringCollection = ConfigurationManager.ConnectionStrings;
 
           if (ConnctionStringCollection != null)
           {
               foreach (ConnectionStringSettings connection in ConnctionStringCollection)
               {
                   if (string.Equals(connection.Name, "LocalConnectionString"))
                   {
                       ConnectionString = connection.ConnectionString;
                       if (!string.IsNullOrEmpty(DB 1) && !string.IsNullOrEmpty(DB 2) && !string.IsNullOrEmpty(DB 3) && !string.IsNullOrEmpty(DB 4) && !string.IsNullOrEmpty(DB 5) && ConnectionString.Contains("master"))
                       {
                           switch (DatabaseEnum)
                           {
                               case 1:
                                   ConnectionString = ConnectionString.Replace("master", DB 1);
                                   break;
                               case 2:
                                   ConnectionString = ConnectionString.Replace("master",  DB 2);
                                   break;
                               case 3:
                                   ConnectionString = ConnectionString.Replace("master",  DB 3);
                                   break;
                               case 4:
                                   ConnectionString = ConnectionString.Replace("master",  DB 4);
                                   break;
                               case 5:
                                   ConnectionString = ConnectionString.Replace("master",  DB 5);
                                   break;
 
                               default:
                                   ConnectionString = ConnectionString.Replace("master",  DB 6);
                                   break;
                           }
                       }
                       break;
                   }
               }
 
               SqlConnection Connection = new SqlConnection(ConnectionString);
               SqlDataAdapter Adapter = new SqlDataAdapter();
               DataSet DashboardGridDataSet = new DataSet();
               try
               {
                   Connection.Open();
                   if (Connection.State.ToString().ToLower() == "open")
                   {
                       Adapter.SelectCommand = new SqlCommand(SelectQuery, Connection);
                       Adapter.Fill(DashboardGridDataSet);
                   }
               }
               finally
               {
                   Connection.Close();
               }
               DataView DashboardGridDataView = DashboardGridDataSet.Tables[0].DefaultView;
               DashboardGrid.DataSource = DashboardGridDataView;
               Session["DashboardGridData"] = DashboardGridDataView;
               Session["GridPages"] = DashboardGrid.PageCount;
                
           }
       }

Below are my sorting and paging event handlers for the RadGrid:

protected void DashboardGrid_PagingCommand(object sender, Telerik.Web.UI.GridPageChangedEventArgs e)
{
    if (e.NewPageIndex < Convert.ToInt32(Session["GridPages"]) && e.NewPageIndex >= 0)
        DashboardGrid.CurrentPageIndex = e.NewPageIndex;
    DashboardGrid.Rebind();
}
 
protected void DashboardGrid_SortCommand(object sender, Telerik.Web.UI.GridSortCommandEventArgs e)
{
    DataView DashGridData = Session["DashboardGridData"] as DataView;
    if (DashGridData != null)
    {
        DashGridData.Sort = e.SortExpression + " " + GetSortDirection(e.SortExpression);
       // GetSortDirection() is some function that returns ASC & DESC alternatively
        DashboardGrid.DataSource = DashGridData;
        DashboardGrid.Rebind();
    }
}


Following is the way I am deploying the control:

<div id="GridShowCaseDivision" runat="server" style="width: 100%; position: absolute;
                height: 100%; right: 0; top: 10">
                <telerik:RadRotator ID="GridShowCaseRotator" runat="server" Width="60%" ItemHeight="100%"
                    Height="35%" WrapFrames="false" ItemWidth="50%" RegisterWithScriptManager="true"
                    RotatorType="Buttons" Visible="true">
                    <Items>
                        <telerik:RadRotatorItem Width="15%">
                            <ItemTemplate>
                                <Dashboard:IconGrid runat="server" ID="EventGrid" DatabaseEnum="4" HasStoredProcedure="false"
                                    QueryOrStoredProcedure=" VALID AND TESTED  SQL QUERY" />
                            </ItemTemplate>
                        </telerik:RadRotatorItem>
                    </Items>
                </telerik:RadRotator>
            </div>

MY QUESTION IS, IF I USE THIS USER CONTROL JUST ONE TIME IT WORKS FINE BUT IF I USE THE SAME CONTROL THE VERY NEXT TIME THAN PAGING/SORTING WILL THROW THIS json ERROR.

AS I HAVE THE PAGING FOOTER I DO SEE PAGE x OF y, ITEMS p TO q OF r - CORRECTLY

1 Answer, 1 is accepted

Sort by
0
Aarsh
Top achievements
Rank 1
answered on 13 Nov 2012, 10:38 PM
finally found the solution, hence I am deploying it as a user control, I can not use the same session variable name ! we can use any different names and it works perfectly !
Tags
Grid
Asked by
Aarsh
Top achievements
Rank 1
Answers by
Aarsh
Top achievements
Rank 1
Share this question
or