Print whole Radgrid from ClientSide during print

8 posts, 0 answers
  1. Srini
    Srini avatar
    2 posts
    Member since:
    Nov 2010

    Posted 23 Nov 2010 Link to this post

    Hi,

    I have a asp.net page( .aspx) with user control( .ascx). That user control has a RADGrid with several records with paging turned on.
    When We want to print, we would like to print all rows( not just rows of current page showing in the grid).
    Currently, when we print, it is printing only the rows from page that is being shown on the grid on the screen.
    To solve the problem, we wanted to hookup onBeforePrint and set the page size to max number of rows and revertback during onafterprint event
    . For that we have the following client-side javascript function. But the effect on RADGrid is not happening until after we get
    the print dialog and click on the print dialog. We would like to know how to make the RADGrid display all rows before
    the print dialog so that print process would pick up the grid with all rows.

    We are wondering how we can do this without going to server and disable the paging through Ajax.

    <script type="text/javascript">

        var pageSize;
        var  PageCount;
        function disableGridPaging()
        {       
            var grid = $find("<%= RadGrid_ContactDetails.ClientID %>");
            pageSize = grid.MasterTableView.PageSize;
            PageCount = grid.MasterTableView.PageCount;
            grid.MasterTableView.beginUpdate();
            grid.MasterTableView.set_pageSize(grid.MasterTableView.PageSize * grid.MasterTableView.PageCount);
            grid.MasterTableView.endUpdate();
        }

        function revertBackGridPaging()
        {
            var grid = $find("<%= RadGrid_ContactDetails.ClientID %>");
            grid.MasterTableView.beginUpdate();
            grid.MasterTableView.set_pageSize(pageSize);
            grid.MasterTableView.endUpdate();
        }

         window.onbeforeprint = disableGridPaging
         window.onafterprint = revertBackGridPaging
    </script>

    thanks,
    Srini

  2. Srini
    Srini avatar
    2 posts
    Member since:
    Nov 2010

    Posted 23 Nov 2010 Link to this post

    We also tried the server AJAX event approach that was suggested in another post.

    On the client we have the following:

    Javascript:
    -----------
    <script type="text/javascript" language="javascript">
        function disableGridPaging()
        {
            var grid = $find("<%= RadGrid_ContactDetails.ClientID %>");
            grid.get_masterTableView().fireCommand("DisablePaging", "");
        }

        function revertBackGridPaging()
        {
            var grid = $find("<%= RadGrid_ContactDetails.ClientID %>");
            grid.get_masterTableView().fireCommand("EnablePaging", "");
        }

        window.onbeforeprint=disableGridPaging
        window.onafterprint = revertBackGridPaging

    </script>

    GRID:
    -----
    <ClientNet:ClientNetRadGrid ID="RadGrid_ContactDetails" runat="server" EnableMouseOver="false"
        AutoGenerateColumns="false" AllowMultiRowSelection="false" EnableSelectColumn="false"
        DefaultColumnWidth="78" AllowPaging="false" Width="100%" Height="200px" BorderWidth="0px"
        EnableAJAXLoadingTemplate="True" EnableAJAX="True" PagerStyle-Mode="NextPrevNumericAndAdvanced"
        onitemcommand="RadGrid_ContactDetails_ItemCommand"
        CommandItemDisplay="Top"  ExcludedFormattingColumn="ContactID">

    Server :
    --------

                protected void RadGrid_ContactDetails_ItemCommand(object source, GridCommandEventArgs e)
                {
                    if (e.CommandName == "DisablePaging")
                    {
                        RadGrid_ContactDetails.AllowPaging = false;
                        RadGrid_ContactDetails.Rebind();
                    }
                    else if (e.CommandName == "EnablePaging")
                    {
                        RadGrid_ContactDetails.AllowPaging = true;
                        RadGrid_ContactDetails.Rebind();
                    }
                }

     

    This approach also did not work with print/print preview. The grid is expanding only after the print event.
    Wondering how to make grid expand and show all the rows before print process..

  3. UI for ASP.NET Ajax is Ready for VS 2017
  4. Dimo
    Admin
    Dimo avatar
    8330 posts

    Posted 24 Nov 2010 Link to this post

    Hi Srini,

    Unfortunately, this is not possible. Please refer to the following page for alternative solutions (exporting or disabling Paging with AJAX):

    http://www.telerik.com/community/forums/aspnet/grid/72051-radgrid-print.aspx

    All the best,
    Dimo
    the Telerik team
    Browse the vast support resources we have to jumpstart your development with RadControls for ASP.NET AJAX. See how to integrate our AJAX controls seamlessly in SharePoint 2007/2010 visiting our common SharePoint portal.
  5. Vijayaraj
    Vijayaraj avatar
    25 posts
    Member since:
    Mar 2011

    Posted 17 Jun 2011 Link to this post

    Hi,

    The link is not working.

    Regards,
    Vijay
  6. Filip
    Admin
    Filip avatar
    38 posts

    Posted 17 Jun 2011 Link to this post

    Hi Vijayaraj,

    Thank you for reporting this!
    We have found the problem and you should be able to access the link now.

    Sorry for the inconvenience!

    Have a relaxing weekend,
    FilipS
    the Telerik team

    Browse the vast support resources we have to jump start your development with RadControls for ASP.NET AJAX. See how to integrate our AJAX controls seamlessly in SharePoint 2007/2010 visiting our common SharePoint portal.

  7. Ram
    Ram avatar
    97 posts
    Member since:
    Jun 2011

    Posted 02 Aug 2011 Link to this post

    Hi
    I'm using radgrid.
    Its working fine.
    I'm able to print the radgrid.
    But while printing I'm disabling the paging and scroll bar and showing the headers.
    But these changes are visible to user at front end and there will be distractions till closing the print window.

    I'm calling serversice ItemCreated function from client side to disable paging etc...
    radGrid.get_masterTableView().fireCommand("EnablePaging", "");
    javascript::
    'function PrintRadGrid(radGridId, radGridId2) {
                var radGrid = $find(radGridId);
                var radgrid2=$find(radGridId2);
                var previewWnd = window.open('about:blank', '', '', false);
                var sh = '<%# ClientScript.GetWebResourceUrl(endPntGrd.GetType(),String.Format("Telerik.Web.UI.Skins.{0}.Grid.{0}.css",endPntGrd.Skin)) %>';
                var sh1 = '<%# ClientScript.GetWebResourceUrl(dispatcherGrd.GetType(),String.Format("Telerik.Web.UI.Skins.{0}.Grid.{0}.css",dispatcherGrd.Skin)) %>';
                var styleStr = "<html><head><link href = '" + sh + "' rel='stylesheet' type='text/css'></link></head>";
                var styleStr= styleStr+"<html><head><link href = '" + sh1 + "' rel='stylesheet' type='text/css'></link></head>";
                var htmlcontent = styleStr + "<body>" + radgrid2.get_element().outerHTML;
                var htmlcontent = htmlcontent+"</br>" + styleStr + radGrid.get_element().outerHTML + "</body></html>"; ;
                previewWnd.document.open();
                previewWnd.document.write(htmlcontent);
                previewWnd.document.close();
                previewWnd.print();
                previewWnd.close();
                radGrid.get_masterTableView().fireCommand("EnablePaging", "");
            }'
    server side::
    'protected void endPntGrd_ItemCommand(object sender, GridCommandEventArgs e)
        {
            if (e.CommandName == "EnablePaging")
            {
                endPntGrd.MasterTableView.ShowHeader = false;
                endPntGrd.MasterTableView.GetColumn("chartcolumn").Display = true;
                endPntGrd.ClientSettings.Scrolling.AllowScroll = true;
                endPntGrd.Rebind();
                dispatcherGrd.ClientSettings.Scrolling.AllowScroll = true;
                dispatcherGrd.MasterTableView.GetColumn("chartcolumn").Display = true;
                dispatcherGrd.MasterTableView.ShowHeader = false;
                dispatcherGrd.Rebind();
            }
        }'
    Please can any one help me how to avoid this problem. Really its urgent for me.
    Please help me
  8. Pankaj
    Pankaj avatar
    24 posts
    Member since:
    Apr 2013

    Posted 29 Apr 2013 Link to this post

    Hi all,

    I have a paged RadGrid with a print function (which is in the RadGrid by default).. it is not printing the generated report in google chrome but its working fine in all the browser , Can anybody Help to solve this problem.

    Thank you in advance!

  9. Eyup
    Admin
    Eyup avatar
    3005 posts

    Posted 02 May 2013 Link to this post

    Hi Pankaj,

    Please note that RadGrid is a complex script control and printing it on a single-click is not fully supported, nor tested. Nevertheless, I am attaching a sample web site to demonstrate how you can print all of the items using an open-in-window approach.

    Alternatively, you can try a server-side approach:
    Copy Code
    Copy Code
    bool isPrinting = false;
    protected void Page_Init(object sender, EventArgs e)
    {
        if (Session["RadGridOutput"] != null)
        {
            var output = Session["RadGridOutput"];
            // execute custom logic
            Session["RadGridOutput"] = null;
        }
    }
    protected void Button1_Click(object sender, EventArgs e)
    {
        isPrinting = true;
        RadGrid1.AllowPaging = false;
        RadGrid1.AllowFilteringByColumn = false;
        RadGrid1.AllowSorting = false;
        RadGrid1.Rebind();
        RemoveWebControls(RadGrid1);
    }
    private void RemoveWebControls(Control ctrl)
    {
        var q = new Stack<Control>(ctrl.Controls.OfType<Control>());
        while (q.Count > 0)
        {
            Control control = q.Pop();
            if (control is IButtonControl || control is ICheckBoxControl || control is ITextControl)
                ctrl.Controls.Remove(control);
            if (control.HasControls())
                RemoveWebControls(control);
        }
    }
    protected override void Render(HtmlTextWriter writer)
    {
        if (isPrinting)
        {
            StringBuilder sb = new StringBuilder();
            StringWriter strWriter = new StringWriter(sb);
            HtmlTextWriter newWriter = new HtmlTextWriter(strWriter);
            RadGrid1.RenderControl(newWriter);
            Session["RadGridOutput"] = sb.ToString();
            Response.Redirect(Request.Url.ToString());
        }
        base.Render(writer);
    }
    public override void VerifyRenderingInServerForm(Control control)
    {
        if (!isPrinting)
            base.VerifyRenderingInServerForm(control);
    }

    Hope this helps.

    Regards,
    Eyup
    the Telerik team
    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.
Back to Top
UI for ASP.NET Ajax is Ready for VS 2017