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

9 posts, 0 answers
  1. tungnt185
    tungnt185 avatar
    40 posts
    Member since:
    Aug 2009

    Posted 21 May 2013 Link to this post

    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.


  2. tungnt185
    tungnt185 avatar
    40 posts
    Member since:
    Aug 2009

    Posted 22 May 2013 Link to this post

    Anyone at Telerik can help me to clarify this problem?

    Thanks
  3. UI for ASP.NET Ajax is Ready for VS 2017
  4. Andrey
    Admin
    Andrey avatar
    836 posts

    Posted 24 May 2013 Link to this post

    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.
  5. tungnt185
    tungnt185 avatar
    40 posts
    Member since:
    Aug 2009

    Posted 24 May 2013 Link to this post

    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

  6. Andrey
    Admin
    Andrey avatar
    836 posts

    Posted 29 May 2013 Link to this post

    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.
  7. tungnt185
    tungnt185 avatar
    40 posts
    Member since:
    Aug 2009

    Posted 19 Jun 2013 Link to this post

    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
  8. Andrey
    Admin
    Andrey avatar
    836 posts

    Posted 19 Jun 2013 Link to this post

    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.
  9. tungnt185
    tungnt185 avatar
    40 posts
    Member since:
    Aug 2009

    Posted 19 Jun 2013 Link to this post

    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
  10. Andrey
    Admin
    Andrey avatar
    836 posts

    Posted 24 Jun 2013 Link to this post

    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.
Back to Top
UI for ASP.NET Ajax is Ready for VS 2017