print radgridview with report (winforms)

12 posts, 0 answers
  1. Dra Graca Melo
    Dra Graca Melo avatar
    5 posts
    Member since:
    Dec 2009

    Posted 15 Apr 2010 Link to this post

    How can I put a button to print the content of a radgridview with a telerik report ?
  2. Jack
    Admin
    Jack avatar
    2335 posts

    Posted 16 Apr 2010 Link to this post

    Hi Dra Graca Melo,

    Please take a look at this code library article. It demonstrates how to generate reports for RadGridView using Telerik Reporting. I hope this helps.

    Best wishes,
    Jack
    the Telerik team

    Do you want to have your say when we set our development plans? Do you want to know when a feature you care about is added or when a bug fixed? Explore the Telerik Public Issue Tracking system and vote to affect the priority of the items.
  3. UI for WinForms is Visual Studio 2017 Ready
  4. Dra Graca Melo
    Dra Graca Melo avatar
    5 posts
    Member since:
    Dec 2009

    Posted 16 Apr 2010 Link to this post

    Thank you. But I can't add the radgridreportinglite.dll as a project reference.
    How can I add the radgridreportinglite.dll ?
  5. Martin Vasilev
    Admin
    Martin Vasilev avatar
    1061 posts

    Posted 21 Apr 2010 Link to this post

    Hi Dra Graca Melo,

    Thank you for getting back to us.

    There is no reason which to prevent adding the RadGridVReportingLite.dll as a reference in your project. Just use the browse option in the Visual Studio's Add Reference Dialog Box.
     

    Kind regards,
    Martin Vasilev
    the Telerik team

    Do you want to have your say when we set our development plans? Do you want to know when a feature you care about is added or when a bug fixed? Explore the Telerik Public Issue Tracking system and vote to affect the priority of the items.
  6. Dra Graca Melo
    Dra Graca Melo avatar
    5 posts
    Member since:
    Dec 2009

    Posted 23 Apr 2010 Link to this post

    Thank you, but I don´t  know where to find the file RadGridReportingLite.dll

  7. Martin Vasilev
    Admin
    Martin Vasilev avatar
    1061 posts

    Posted 26 Apr 2010 Link to this post

    Hi Dra Graca Melo,

    Thank you for getting back to me.

    Recently, we have added the latest revision of RadGridReportingLite library, which works with Q1 2010 SP1 releases. You can find the project files along with RadGridReportingLite.dll in our Code Library section.

    Let me know if you have any additional questions.

    Kind regards,
    Martin Vasilev
    the Telerik team

    Do you want to have your say when we set our development plans? Do you want to know when a feature you care about is added or when a bug fixed? Explore the Telerik Public Issue Tracking system and vote to affect the priority of the items.
  8. Doug
    Doug avatar
    26 posts
    Member since:
    Feb 2011

    Posted 25 Jul 2011 Link to this post

    I have the Q2 2011 WinForm Controls and Telerik Reporting.  I have a radGridView which contains multiple records where each has child records.  I have created a process where I can checkbox the child records I want and then refresh the grid with the selected Parent, Child records.  I now wish to print these records using a Telerik Report.  The RadGridViewReporting.dll article states that it is now obsolete and that if I have the tools mentioned above I should be able to print the grid formatted in the Telerik Report.  I am to the point where I can pass the grid to the new report / report viewer but here is where I am stuck.

    How do I associate the columns and rows in the passed in gridview to fields on the report.  I would like to print 4-5 lines per detail record and I can create the appropriate fields but I can't find any information on how to bind the columns (cells) in the gridview to the fields I have created on the report.

    I should also mention that the original source of the data in the grid is from an XML file.  (http://www.telerik.com/community/forums/winforms/gridview/populate-radgrid-with-hierarchical-xml-data.aspx)

    My goal is to print the XML file response formatted in a Telerik Report.

    Thoughts?

    Doug

  9. Martin Vasilev
    Admin
    Martin Vasilev avatar
    1061 posts

    Posted 28 Jul 2011 Link to this post

    Hi Doug,

    Thank you for writing.

    Indeed, we do not support RadGridReportingLite anymore and it is possible that it could not work properly with Q2 2011 release. Generally speaking, there is not a straight way for binding fields between RadGridView and Telerik Reporting.

    If you need to print the grid, I would recommend considering one of the built-in export features (to excel or pdf) and then print the grid from the opened file in the external program. 

    Let me know if you have any other questions.

    Regards,
    Martin Vasilev
    the Telerik team

    Register for the Q2 2011 What's New Webinar Week. Mark your calendar for the week starting July 18th and book your seat for a walk through of all the exciting stuff we will ship with the new release!

  10. Doug
    Doug avatar
    26 posts
    Member since:
    Feb 2011

    Posted 15 Aug 2011 Link to this post

    Thanks Martin,

    I have been playing around with that and it may work for what I need to do, however, I can't get it to format very well.  I would like to be able to control the width of the columns that print on the page.  I have been able to get it to print landscape which is a requirement but I need to be able to set the column sizes on the parent row as well as the child rows.  (It is a grid with Hierachical data).  

    HTMLCellFormatting seems like it might be the answer but I am unclear as to how to implement that when it is generating the "report".  Is there some sample code which may show me how to accomlish this?

    UPDATE: I noticed in some other posts that another issue I am having with export to pdf is the overlap of data in the final columns because of a limitation with the pdf writer.  So after more thought, I would not be opposed to exporting to HTML and opening up the html file in a webbrowser control in my WINFORMS project.  So if there is a tutorial on export to html using the radgridview in Winforms, that would be most helpful.

    Thanks for your help!

    Doug

  11. Martin Vasilev
    Admin
    Martin Vasilev avatar
    1061 posts

    Posted 18 Aug 2011 Link to this post

    Hello Doug,

    Thank you for contacting me again.

    I suppose you are trying to use the ExportToPDF functionality. Actually, there is not a way to manually setup the column width while exporting. This cannot be done through HTMLCellFormatting event. However, the size is transferred from the grid's settings, which means you can change the column width before exporting and than set it back to the initial value. But you should keep in mind that the child column width in the exported file cannot be separately controlled. It takes the size of the upper parent column.

    I confirm that there is an issue with overlapping data in some scenarios. You can work around it by using the ExportToPDF's Scale property, which will allow for sizing the exported grid according to the available page size. 

    For detailed information on how to export to html format, you can refer in our product documentation.

    Do not hesitate to contact me again if you have any additional questions.

    Regards,
    Martin Vasilev
    the Telerik team

    Explore the entire Telerik portfolio by downloading the Ultimate Collection trial package. Get now >>

  12. Doug
    Doug avatar
    26 posts
    Member since:
    Feb 2011

    Posted 18 Aug 2011 Link to this post

    Hi Martin,

    Thank you for getting back to me!  I decided to switch from the ExportToPDF to ExportoHTML as there was no real need to use the PDF format of the file.  I am using both techniques you have outlined in various responses where I am formatting the grid to be pretty close to what I need and then formatting the HTML result before exporting it to a file.  I am 99% there.  Once the file is generated I am using the showpreviewdialog for the webbrowser control on my winform so that the user can preview the html page before printing.  This allows them to switch to Landscape layout to then do the print.  The 1% that I am missing is the ability to switch the layout for printing to landscape so I can send directly to the printer after viewing the grid taking the guess work away from the user.  If you have any thoughts on that, great, otherwise, thanks for all your help!

    In case this helps anybody else:

    Here is my code to load the grid from an XML file that is being returned to me:

    if (xmlDataSet.Tables.Contains("PISearch") == true)
    {
        this.uigrdSearchResults.DataSource = xmlDataSet.Tables[2];
        uigrdSearchResults.Columns[0].Width = 50;
        uigrdSearchResults.Columns[2].IsVisible = false;
        uigrdSearchResults.Columns[3].IsVisible = false;
        //=============================================
        // setup the grid and load using the xml data provided
        //=============================================
        if (xmlDataSet.Tables.Contains("PIRecord") == true)
        {
            GridViewTemplate PIResultsTemplate = new GridViewTemplate();
            PIResultsTemplate.AllowAddNewRow = false;
            PIResultsTemplate.AllowEditRow = true;
            var PIcolumn = new GridViewCheckBoxColumn();
            PIcolumn.HeaderText = "Select";
            PIcolumn.ReadOnly = false;
            PIResultsTemplate.Columns.Add(PIcolumn);
            this.uigrdSearchResults.MasterTemplate.Templates.Add(PIResultsTemplate);
            GridViewRelation relation = new GridViewRelation(this.uigrdSearchResults.MasterTemplate);
            relation.ChildTemplate = PIResultsTemplate;
            relation.RelationName = "PISearch_PIRecords";
            relation.ParentColumnNames.Add("PISearch_Id");
            relation.ChildColumnNames.Add("PIRecords_Id");
            this.uigrdSearchResults.Relations.Add(relation);
            PIResultsTemplate.DataSource = xmlDataSet.Tables[4];
            PIResultsTemplate.Columns[6].IsVisible = false; //Unit
            PIResultsTemplate.Columns[8].IsVisible = false; //Exempt Code
            PIResultsTemplate.Columns[16].IsVisible = false; //UID
            PIResultsTemplate.Columns[17].IsVisible = false; //PIRecord Index
            this.uigrdSearchResults.MasterTemplate.Templates[0].BestFitColumns();
        }
        this.uigrdSearchResults.MasterTemplate.BestFitColumns();
        this.uigrdSearchResults.AutoExpandGroups = true;
    }

    And my code to format the data to send to the HTML file  (ignore the void name, it is really html and not pdf :) ):

    private void uibtnPrintToPDF_Click(object sender, EventArgs e)
    {
        foreach (var row in this.uigrdSearchResults.Rows)
        {
            pitotrecords += row.ChildRows.Count;
            foreach (var childrow in row.ChildRows)
            {
                if (Convert.ToBoolean(childrow.Cells[0].Value) == false)
                {
                    childrow.Delete();
                    pichanged = true;
                }
                else
                {
                    childrow.Cells[0].ColumnInfo.IsVisible = false// select column
                    childrow.Cells[1].ColumnInfo.IsVisible = false// image flag column
                    childrow.Cells[15].ColumnInfo.IsVisible = false; // PIRecord ID Column
                }
            }
            pirecords += row.ChildRows.Count;
        }
        foreach (var row in this.uigrdSearchResultsGI.Rows)
        {
            gitotrecords += row.ChildRows.Count;
            foreach (var childrow in row.ChildRows)
            {
                if (Convert.ToBoolean(childrow.Cells[0].Value) == false)
                {
                    childrow.Delete();
                    gichanged = true;
                }
                else
                {
                    childrow.Cells[0].ColumnInfo.IsVisible = false// select column
                    childrow.Cells[1].ColumnInfo.IsVisible = false// image flag column
                    childrow.Cells[12].ColumnInfo.IsVisible = false// GUID
                    childrow.Cells[13].ColumnInfo.IsVisible = false// GIRecord ID
                }
            }
            girecords += row.ChildRows.Count;
        }
        ExportToHTML PIexporter = new ExportToHTML(uigrdSearchResults);
        PIexporter.HiddenColumnOption = Telerik.WinControls.UI.Export.HiddenOption.DoNotExport;
        PIexporter.SummariesExportOption = SummariesOption.DoNotExport;
        PIexporter.Scale = 1;
        PIexporter.FileExtension = "html";
        PIexporter.TableBorderThickness = 1;
        PIexporter.TableCaption = "Order Search Results - PI";
        PIexporter.HTMLCellFormatting += new Telerik.WinControls.UI.Export.HTML.HTMLCellFormattingEventHandler(PIexporter_HTMLCellFormatting);
        PIexporter.HTMLTableCaptionFormatting += new Telerik.WinControls.UI.Export.HTML.HTMLTableCaptionFormattingEventHandler(PIexporter_HTMLTableCaptionFormatting);
        PIexporter.ExportVisualSettings = false;
        PIexporter.ExportHierarchy = true;
        PIexporter.RunExport("c:\\PISearchResults.html");
        ExportToHTML GIexporter = new ExportToHTML(uigrdSearchResultsGI);
        GIexporter.HiddenColumnOption = Telerik.WinControls.UI.Export.HiddenOption.DoNotExport;
        GIexporter.SummariesExportOption = SummariesOption.DoNotExport;
        GIexporter.Scale = 1;
        GIexporter.FileExtension = "html";
        GIexporter.TableBorderThickness = 1;
        GIexporter.TableCaption = "Order Search Results - GI";
        GIexporter.HTMLCellFormatting += new Telerik.WinControls.UI.Export.HTML.HTMLCellFormattingEventHandler(GIexporter_HTMLCellFormatting);
        GIexporter.HTMLTableCaptionFormatting += new Telerik.WinControls.UI.Export.HTML.HTMLTableCaptionFormattingEventHandler(GIexporter_HTMLTableCaptionFormatting);
        GIexporter.ExportVisualSettings = false;
        GIexporter.ExportHierarchy = true;
        GIexporter.RunExport("c:\\GISearchResults.html");
            webBrowser1.Url = new Uri("c:\\PISearchResults.html");
            webBrowser2.Url = new Uri("c:\\GISearchResults.html");
            Application.DoEvents();
            webBrowser1.ShowPrintPreviewDialog();
            webBrowser2.ShowPrintPreviewDialog();
            Application.DoEvents();
    }
    private void PIexporter_HTMLCellFormatting(object sender, Telerik.WinControls.UI.Export.HTML.HTMLCellFormattingEventArgs e)
    {
        if (e.GridColumnIndex == 1 && e.GridRowInfoType == typeof(GridViewTableHeaderRowInfo))
        {
            e.HTMLCellElement.Colspan = 12;
        }
        if (e.GridColumnIndex == 1 && e.GridRowInfoType == typeof(GridViewHierarchyRowInfo))
        {
            e.HTMLCellElement.Colspan = 12;
        }
        if (e.HTMLCellElement.Value == "")
        {
            e.HTMLCellElement.Value = " ";
        }
        switch (e.HTMLCellElement.Value)
        {
            case "Blk":
                e.HTMLCellElement.Styles.Add("width", "20px");
                break;
            case "Lot":
                e.HTMLCellElement.Styles.Add("width", "20px");
                break;
            case "DocumentDate":
                e.HTMLCellElement.Styles.Add("width", "100px");
                break;
            case "InstrumentDate":
                e.HTMLCellElement.Styles.Add("width", "100px");
                break;
            case "Amount":
                e.HTMLCellElement.Styles.Add("width", "100px");
                break;
            default:
                e.HTMLCellElement.Styles.Add("width", "0px");
                break;
        }
    }
    private void PIexporter_HTMLTableCaptionFormatting(object sender, Telerik.WinControls.UI.Export.HTML.HTMLTableCaptionFormattingEventArgs e)
    {
        e.TableCaptionElement.Styles.Add("background-color", ColorTranslator.ToHtml(Color.White));
        e.TableCaptionElement.Styles.Add("font-size", "100%");
        e.TableCaptionElement.Styles.Add("color", ColorTranslator.ToHtml(Color.Black));
        e.TableCaptionElement.Styles.Add("font-weight", "bold");
        e.CaptionText = "Order Search Results - PI: " + pirecords.ToString() + " of " + pitotrecords.ToString() + " selected";
    }
    private void GIexporter_HTMLCellFormatting(object sender, Telerik.WinControls.UI.Export.HTML.HTMLCellFormattingEventArgs e)
    {
        if (e.GridColumnIndex == 1 && e.GridRowInfoType == typeof(GridViewTableHeaderRowInfo))
        {
            e.HTMLCellElement.Colspan = 10;
        }
        if (e.GridColumnIndex == 1 && e.GridRowInfoType == typeof(GridViewHierarchyRowInfo))
        {
            e.HTMLCellElement.Colspan = 10;
        }
        if (e.HTMLCellElement.Value == "")
        {
            e.HTMLCellElement.Value = " ";
        }
        switch (e.HTMLCellElement.Value)
        {
            case "PrincipalType":
                e.HTMLCellElement.Styles.Add("width", "50px");
                break;
            default:
                e.HTMLCellElement.Styles.Add("width", "0px");
                break;
        }
    }
    private void GIexporter_HTMLTableCaptionFormatting(object sender, Telerik.WinControls.UI.Export.HTML.HTMLTableCaptionFormattingEventArgs e)
    {
        e.TableCaptionElement.Styles.Add("background-color", ColorTranslator.ToHtml(Color.White));
        e.TableCaptionElement.Styles.Add("font-size", "100%");
        e.TableCaptionElement.Styles.Add("color", ColorTranslator.ToHtml(Color.Black));
        e.TableCaptionElement.Styles.Add("font-weight", "bold");
        e.CaptionText = "Order Search Results - GI: " + girecords.ToString() + " of " + gitotrecords.ToString() + " selected";
    }


    Doug

  13. Martin Vasilev
    Admin
    Martin Vasilev avatar
    1061 posts

    Posted 23 Aug 2011 Link to this post

    Hi Doug,

    Thank you very much for sharing your code. 

    You have chosen an interesting approach to print RadGridView, which I am sure some other users could find useful. Unfortunately, I do not believe there is an elegant way to make the landscape default page orientation when bringing the print preview for WebBrowser control. As a kind of work-around you can use SendKeys class to simulate Alt+ L combination, which sets the preview to landscape:
    this.webBrowser1.ShowPrintPreviewDialog();
    Timer timer = new Timer();
    timer.Interval = 400;
    timer.Start();
    timer.Tick += (s, args) =>
        {
            SendKeys.SendWait("%L");
            timer.Stop();
        };

    I have updated your telerik points for posting your code in our community forums. Do not hesitate to write me back if you need any additional assistance.

    Regards,
    Martin Vasilev
    the Telerik team

    Thank you for being the most amazing .NET community! Your unfailing support is what helps us charge forward! We'd appreciate your vote for Telerik in this year's DevProConnections Awards. We are competing in mind-blowing 20 categories and every vote counts! VOTE for Telerik NOW >>

Back to Top
UI for WinForms is Visual Studio 2017 Ready