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

Problem with custom paging of RadGridView which is loaded into asp:panel

8 Answers 82 Views
Grid
This is a migrated thread and some comments may be shown as answers.
tungnt185
Top achievements
Rank 2
tungnt185 asked on 21 May 2013, 08:58 AM
Hi Telerik team,

I'm using RadGridView and I'm facing a strange problem now. I've:
  • 1 default.aspx that have an asp:panel
  • 1 usercontrol uc1 that have a RadGridView with Custom Paging using ObjectDataSource

In default.aspx page_load event I load uc1 into the panel:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        Dim uc As UserControl = Page.LoadControl("~/uc1.ascx")
        pnlGrid.Controls.Add(uc)
End Sub


Everything work fine except paging next page, it can't next to page 3 because SelectMethod of ObjectDataSource always run twice with startRowIndex = 0 at the first time run:

<asp:ObjectDataSource runat="server" ID="odsTest" TypeName="WebApplication2.BL" EnablePaging="true" SelectMethod="GetAllTest" SelectCountMethod="GetTestCount" MaximumRowsParameterName="maximumRows" StartRowIndexParameterName="startRowIndex"></asp:ObjectDataSource>


After debug I found this problem cause of loading usercontrol to panel if panel markup like this:
<asp:Panel ID="pnlGrid" runat="server">
</asp:Panel>

(There are a <asp:Literal> control auto-generated here)

But if panel markup like:

<asp:Panel ID="pnlGrid" runat="server"></asp:Panel>
  or
<asp:Panel ID="pnlGrid" runat="server"/>
problem not occur.

So what is exactly problem here? It's my fault or it is by design?

Thanks so much.


8 Answers, 1 is accepted

Sort by
0
tungnt185
Top achievements
Rank 2
answered on 23 May 2013, 02:46 AM
Anyone at Telerik can help me to clarify this problem?

Thanks
0
Andrey
Telerik team
answered on 24 May 2013, 06:53 AM
Hi,

Basically there should be no problem when defining the Panel control by different means yet this is the same control.

Could you share your RadGrid mark-up with the code-behind file. Thus I will be able to examine your code and let you know what could possibly lead to this behavior.

Regards,
Andrey
Telerik
If you want to get updates on new releases, tips and tricks and sneak peeks at our product labs directly from the developers working on the RadControls for ASP.NET AJAX, subscribe to their blog feed now.
0
tungnt185
Top achievements
Rank 2
answered on 24 May 2013, 12:23 PM
Thanks Andrey for your response.

Below is my markup and code. Please examine it.

Default.aspx:
<%@ Page Language="vb" AutoEventWireup="false" CodeBehind="Default.aspx.vb" Inherits="WebApplication2._Default" %>
 
<%@ Register Assembly="Telerik.Web.UI" Namespace="Telerik.Web.UI" TagPrefix="telerik" %>
<!DOCTYPE html>
 
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
        <telerik:RadScriptManager runat="server" ID="RadScriptManager" AsyncPostBackTimeout="600">
        </telerik:RadScriptManager>
        <telerik:RadStyleSheetManager ID="RadStyleSheetManager1" runat="server" />
        <telerik:RadAjaxManager ID="RadAjaxManager1" runat="server">
        </telerik:RadAjaxManager>
        <telerik:RadAjaxLoadingPanel ID="RadAjaxLoadingPanel1" runat="server">
        </telerik:RadAjaxLoadingPanel>
 
        <asp:Panel runat="server" ID="pnlTest">
        </asp:Panel>
    </form>
</body>
</html>

Default.aspx.vb
Imports System.Data.Common
Imports Telerik.Web.UI
 
Public Class _Default
    Inherits System.Web.UI.Page
 
    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
 
        If String.IsNullOrEmpty(CurrentControl) Then
            LoadUserControl("~/TestUC.ascx")
        Else
            LoadUserControl(CurrentControl)
        End If
    End Sub
 
    Private sCurrentControlKey As String = "CurrentControl"
    Public Property CurrentControl() As String
        Get
            Return IIf(Me.ViewState(sCurrentControlKey) Is Nothing, String.Empty, CType(Me.ViewState(sCurrentControlKey), String))
        End Get
        Set(ByVal value As String)
            Me.ViewState(sCurrentControlKey) = value
        End Set
    End Property
 
    Private Sub LoadUserControl(controlName As String)
        pnlTest.Controls.Clear()
        Dim MyControl As UserControl = CType(Page.LoadControl(controlName), UserControl)
 
        Dim userControlID As String = controlName.Split(".")(0)
        MyControl.ID = userControlID.Replace("/", "").Replace("~", "")
        pnlTest.Controls.Add(MyControl)
        Me.CurrentControl = controlName
    End Sub
 
End Class

TestUC.ascx
<%@ Control Language="vb" AutoEventWireup="false" CodeBehind="TestUC.ascx.vb" Inherits="WebApplication2.TestUC" %>
<%@ Register TagPrefix="telerik" Namespace="Telerik.Web.UI" Assembly="Telerik.Web.UI" %>
 
<telerik:RadAjaxManagerProxy ID="RadAjaxManagerProxy1" runat="server">
    <AjaxSettings>
        <telerik:AjaxSetting AjaxControlID="grdTest">
            <UpdatedControls>
                <telerik:AjaxUpdatedControl ControlID="grdTest" LoadingPanelID="RadAjaxLoadingPanel1" />
            </UpdatedControls>
        </telerik:AjaxSetting>
    </AjaxSettings>
</telerik:RadAjaxManagerProxy>
 
<asp:ObjectDataSource runat="server" ID="odsTest" TypeName="WebApplication2.BL" EnablePaging="true" SelectMethod="GetAllData" SelectCountMethod="GetDataCount" MaximumRowsParameterName="maximumRows" StartRowIndexParameterName="startRowIndex"></asp:ObjectDataSource>
 
<telerik:RadGrid ID="grdTest" runat="server" DataSourceID="odsTest" AllowPaging="true" PagerStyle-Position="Bottom" AllowMultiRowSelection="true" AllowSorting="true"  CellSpacing="0" GridLines="None">
    <MasterTableView Width="100%" CommandItemDisplay="Top" AutoGenerateColumns="false" AllowMultiColumnSorting="true" DataKeyNames="ID">
        <Columns>
            <telerik:GridClientSelectColumn></telerik:GridClientSelectColumn>
            <telerik:GridTemplateColumn UniqueName="Title" SortExpression="Title" DataField="Title">
                <ItemTemplate>
                    <table>
                        <tr>
                            <td><%# Eval("Title")%></td>
                        </tr>
                    </table>
                </ItemTemplate>
            </telerik:GridTemplateColumn>
        </Columns>
    </MasterTableView>
    <CommandItemStyle Height="27px"></CommandItemStyle>
    <ClientSettings>
        <Selecting AllowRowSelect="true" />
    </ClientSettings>
</telerik:RadGrid>


BL.vb
Imports System.Data.Common
Imports Microsoft.Practices.EnterpriseLibrary.Data
 
Public Class BL
 
    Private db As Database
    Public Function GetData(ByVal startRowIndex As Integer, ByVal maximumRows As Integer) As DataTable
 
        Dim cmd As DbCommand = db.GetStoredProcCommand("ProcGetData", startRowIndex, maximumRows)
        cmd.CommandType = CommandType.StoredProcedure
        cmd.CommandTimeout = 30
        Return db.ExecuteDataSet(cmd).Tables(0)
    End Function
 
    Public Function GetDataCount() As Integer
        Dim cmd As DbCommand = db.GetStoredProcCommand("ProcGetDataCount")
        cmd.CommandType = CommandType.StoredProcedure
        cmd.CommandTimeout = 30
        Return CInt(db.ExecuteScalar(cmd))
    End Function
 
    Public Sub New()
        db = DatabaseFactory.CreateDatabase("testConn")
    End Sub
End Class

0
Andrey
Telerik team
answered on 29 May 2013, 08:36 AM
Hi,

Based on your code I see that you are not using the RadGrid custom paging but you are using the ObjectDataSource built-in paging. In this case what you could do is to place a break-point in the GetData method and inspect the parameter that are passed and their values. Most probably the problem comes from wrong values passed to the GetData method.

Regards,
Andrey
Telerik
If you want to get updates on new releases, tips and tricks and sneak peeks at our product labs directly from the developers working on the RadControls for ASP.NET AJAX, subscribe to their blog feed now.
0
tungnt185
Top achievements
Rank 2
answered on 19 Jun 2013, 08:27 AM
Hi Andrey,

I know the problem is wrong values of parameter in GetData method but why this method is always run twice?
You can try my code to examine the problem.

Thanks
0
Andrey
Telerik team
answered on 19 Jun 2013, 01:00 PM
Hi,

How did you check that the method run twice? Using a break-point in code or using SQL profiler?

Regards,
Andrey
Telerik
If you want to get updates on new releases, tips and tricks and sneak peeks at our product labs directly from the developers working on the RadControls for ASP.NET AJAX, subscribe to the blog feed now.
0
tungnt185
Top achievements
Rank 2
answered on 20 Jun 2013, 01:50 AM
Hi Andrey,

I used break-point.
This method always run twice with startRowIndex = 0 at the first time run but I don't know why?

Regards
0
Andrey
Telerik team
answered on 24 Jun 2013, 10:16 AM
Hello,

This is a common scenario for ObjectDataSource control as you could verify from this and many other threads around the internet.

You could make the ObjectDataSource control make only one call by turning on the caching of the control by using EnableCaching property.

Regards,
Andrey
Telerik
If you want to get updates on new releases, tips and tricks and sneak peeks at our product labs directly from the developers working on the RadControls for ASP.NET AJAX, subscribe to the blog feed now.
Tags
Grid
Asked by
tungnt185
Top achievements
Rank 2
Answers by
tungnt185
Top achievements
Rank 2
Andrey
Telerik team
Share this question
or