一次性列印多個C1FlexGrid

來源:互聯網
上載者:User

標籤:winform   style   blog   http   color   io   os   使用   ar   

在WinForm平台下,C1FlexGrid控制項有提供PrintGrid方法實現列印。但針對列印多個C1FlexGrid,只能使用迴圈列印,每次都要預覽,然後一個個的列印。這樣未免太麻煩。那麼,有沒有更好的列印多個C1FlexGrid的方法呢?

本文就來討論如何將多個C1FlexGrid一次性展示出來,讓使用者更快速和靈活的選擇列印方式。

載入多個C1FlexGrid

添加多個C1FlexGrid,本文的樣本中添加了2個C1FlexGrid到表單,並且通過DataSource給他們綁定不同的資料來源。

然後聲明全域變數fxCollection,並在FormLoad事件中將這些C1FlexGrid都添加到List中。代碼如下:

?
1234 List<C1FlexGrid> fxCollection;fxCollection = new List<C1FlexGrid>();fxCollection.Add(_flex);fxCollection.Add(c1FlexGrid1);

 

設計預覽列印表單

建立一個新的表單,並在該表單上拖拽C1PrintPreviewControl,為之後C1FlexGrid的預覽列印做好準備。

具體代碼可以參考附件Sample。

將多個C1FlexGrid列印到PrintDocument裡調用PrintDcoment的PrintPage和EndPring事件

聲明一個PrintDocument並且調用它的PrintPage和EndPring事件。並且將這個PrintDocument設定到C1PrintPreviewControl上,展示預覽列印對話方塊。

有關PrintPage和EndPring這兩個事件的處理在後面詳細介紹。

代碼參考:

?
123456789101112131415 void _btnCustom_Click(object sender, EventArgs e)        {            _flexCurrent = 0;            // create regular PrintDocument, attach event handlers            var doc = new PrintDocument();            doc.PrintPage += doc_PrintPage;            doc.EndPrint += doc_EndPrint;             // show new document in Custom print preview dialog            using (var dlg = new C1PrintPreview.C1PrintPreviewDialog())            {                dlg.Document = doc;                dlg.ShowDialog();            }        }

 

PrintDocumentGridRenderer

在這裡我們要使用一個很重要的類PrintDocumentGridRenderer,在PrintPage事件裡,將全域變數聲明的PrintDocumentGridRenderer傳入C1FlexGrid,就能使用它的PrintPage方法將當前的頁列印到document裡。

PringPage事件通過e.HasMorePage判斷是否還需要列印下一頁。這時候需要添加兩個判斷條件保證繼續列印,一個是當前的FlexGrid還有頁沒打完,另一個是多個C1FlexGrid還未全部列印完成。

定義的全域變數int _flexCurrent,是用來對當前列印到哪個List裡儲存的哪個C1FlexGrd,並通過這個變數將當前的C1FlexGrid傳入到PrintDocumentGridRenderer中,帶這個C1FlexGrid的頁面全部列印完成。計數加一,並且傳入下一個C1FlexGrid繼續列印。

代碼如下:

?
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 PrintDocumentGridRenderer _pdr;        int _flexCurrent;        void doc_PrintPage(object sender, PrintPageEventArgs e)        {            if (_flexCurrent == 0 || _pdr.CurrentPage >= _pdr.PageCount)            {                _pdr = new PrintDocumentGridRenderer(fxCollection[_flexCurrent]);                _pdr.Options = PrintGridFlags.ActualSize;                 // print header on first page of c1flexgrid                if (_pdr.CurrentPage == 0)                {                    using (var font = new Font("Verdana", 14, FontStyle.Bold))                    {                        // render the title                        var title = fxCollection[_flexCurrent].Tag.ToString();                        e.Graphics.DrawString(title, font, Brushes.Black, e.MarginBounds.Location);                          // push the grid rendering down to make room for the title                        _pdr.FirstPageY =                            e.MarginBounds.Location.Y +                            (int)e.Graphics.MeasureString(title, font).Height;                    }                }                _flexCurrent++;            }             //// print the current page            _pdr.PrintPage(e);             // print a header on all pages            var header = string.Format("Page {0}/{1}", _pdr.CurrentPage, _pdr.PageCount);            var rc = new Rectangle(e.MarginBounds.X, 0, e.MarginBounds.Width, e.MarginBounds.Bottom);             using (var font = new Font("Verdana", 10, FontStyle.Bold))            {                e.Graphics.DrawLine(Pens.Blue, rc.X, rc.Bottom, rc.Right, rc.Bottom);                e.Graphics.DrawString(header, font, Brushes.Blue, e.MarginBounds.Left, e.MarginBounds.Bottom);//, fmt);             }             e.HasMorePages = _pdr.CurrentPage < _pdr.PageCount || _flexCurrent < fxCollection.Count;        }        void doc_EndPrint(object sender, PrintEventArgs e)        {            // done, we no longer need the PrintDocumentGridRenderer.            _pdr = null;        }

 

運行結果展示

最後,就會得到如附件所示的Sample,運行起來的效果如所示:

 

在這個表單上展示了兩個C1FlexGrid,並且綁定不同的資料來源。第一個C1FlexGrid有 4頁資料,第二個C1FlexGrid有3頁資料。

點擊AdvancePrint按鈕,就會彈出如下對話方塊預覽列印:

 

我們可以看到C1FlexGrid已經顯示在這個預覽列印框裡,並且顯示一共有七頁。

這個時候,使用者只要單擊列印按鈕,就能輕鬆的將多個C1FlexGrid一次性列印出來。

http://blog.gcpowertools.com.cn/post/2014/09/25/C1FlexGridPrint.aspx

一次性列印多個C1FlexGrid

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.