Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- html parser
- 딴지일보 자유게시판 파씽
- Xcode
- StreamReader
- mdb table 합치기
- swift html parser
- MDB
- 유성
- 노은
- VBA
- 자전거
- dataset
- 대전 업힐
- Exif
- euc-kr
- kanna html parser
- EXIF data
- 엑셀
- insert into
- kanna parser
- 달력
- exifread
- file move
- 스위프트
- 대전 자전거
- python
- 파이썬
- 대전
- C#
- swift
Archives
- Today
- Total
Fly to the sky & Return
Datagridveiw 내용을 Print 하기 본문
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.
소스는 인터넷 펌입니다.. 아마 널려있을 듯하고
중간중간 필요한 부분을 수정했습니다.
원래 소스를 사용하면 조금 요상하게 출력이 되서..
using System.Drawing.Printing; <- 요거 추가필요하며
도구상자에서 printDocument 를 추가해야합니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 | class ClsPrint { #region Variables int iCellHeight = 0; //Used to get/set the datagridview cell height int iTotalWidth = 0; // int iRow = 0;//Used as counter bool bFirstPage = false; //Used to check whether we are printing first page bool bNewPage = false;// Used to check whether we are printing a new page int iHeaderHeight = 0; //Used for the header height StringFormat strFormat; //Used to format the grid rows. ArrayList arrColumnLefts = new ArrayList();//Used to save left coordinates of columns ArrayList arrColumnWidths = new ArrayList();//Used to save column widths private PrintDocument _printDocument = new PrintDocument(); private DataGridView gw = new DataGridView(); private string _ReportHeader; #endregion public ClsPrint(DataGridView gridview, string ReportHeader) { _printDocument.PrintPage += new PrintPageEventHandler(_printDocument_PrintPage); _printDocument.BeginPrint += new PrintEventHandler(_printDocument_BeginPrint); gw = gridview; _ReportHeader = ReportHeader; } public void PrintForm() { ////Open the print dialog //PrintDialog printDialog = new PrintDialog(); //printDialog.Document = _printDocument; //printDialog.UseEXDialog = true; ////Get the document //if (DialogResult.OK == printDialog.ShowDialog()) //{ // _printDocument.DocumentName = "Test Page Print"; // _printDocument.Print(); //} //Open the print preview dialog PrintPreviewDialog objPPdialog = new PrintPreviewDialog(); objPPdialog.Document = _printDocument; objPPdialog.ShowDialog(); } private void _printDocument_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e) { //try //{ //Set the left margin int iLeftMargin = e.MarginBounds.Left; //Set the top margin int iTopMargin = e.MarginBounds.Top; //Whether more pages have to print or not bool bMorePagesToPrint = false; int iTmpWidth = 0; //For the first page to print set the cell width and header height if (bFirstPage) { foreach (DataGridViewColumn GridCol in gw.Columns) { iTmpWidth = (int)(((Math.Floor((double)((double)GridCol.Width / (double)iTotalWidth * (double)iTotalWidth * ((double)e.MarginBounds.Width / (double)iTotalWidth))))) * 0.66); iHeaderHeight = (int)(e.Graphics.MeasureString(GridCol.HeaderText, GridCol.InheritedStyle.Font, iTmpWidth).Height) + 11; // Save width and height of headers arrColumnLefts.Add(iLeftMargin); arrColumnWidths.Add(iTmpWidth); iLeftMargin += iTmpWidth; } } //Loop till all the grid rows not get printed while (iRow <= gw.Rows.Count - 1) { DataGridViewRow GridRow = gw.Rows[iRow]; //Set the cell height iCellHeight = GridRow.Height + 5; int iCount = 0; //Check whether the current page settings allows more rows to print if (iTopMargin + iCellHeight >= e.MarginBounds.Height + e.MarginBounds.Top) { bNewPage = true; bFirstPage = false; bMorePagesToPrint = true; break; } else { if (bNewPage) { //Draw Header e.Graphics.DrawString(_ReportHeader, new Font(gw.Font, FontStyle.Bold), Brushes.Black, e.MarginBounds.Left, e.MarginBounds.Top - e.Graphics.MeasureString(_ReportHeader, new Font(gw.Font, FontStyle.Bold), e.MarginBounds.Width).Height - 13); String strDate = ""; //Draw Date e.Graphics.DrawString(strDate, new Font(gw.Font, FontStyle.Bold), Brushes.Black, e.MarginBounds.Left + (e.MarginBounds.Width - e.Graphics.MeasureString(strDate, new Font(gw.Font, FontStyle.Bold), e.MarginBounds.Width).Width), e.MarginBounds.Top - e.Graphics.MeasureString(_ReportHeader, new Font(new Font(gw.Font, FontStyle.Bold), FontStyle.Bold), e.MarginBounds.Width).Height - 13); //Draw Columns iTopMargin = e.MarginBounds.Top; DataGridViewColumn[] _GridCol = new DataGridViewColumn[gw.Columns.Count]; int colcount = 0; //Convert ltr to rtl foreach (DataGridViewColumn GridCol in gw.Columns) { _GridCol[colcount++] = GridCol; } // for (int i = (_GridCol.Count() - 1); i >= 0; i--) for (int i = 0; i <= (_GridCol.Count() - 1); i++) { e.Graphics.FillRectangle(new SolidBrush(Color.LightGray), new Rectangle((int)arrColumnLefts[iCount], iTopMargin, (int)arrColumnWidths[iCount], iHeaderHeight)); e.Graphics.DrawRectangle(Pens.Black, new Rectangle((int)arrColumnLefts[iCount], iTopMargin, (int)arrColumnWidths[iCount], iHeaderHeight)); e.Graphics.DrawString(_GridCol[i].HeaderText, _GridCol[i].InheritedStyle.Font, new SolidBrush(_GridCol[i].InheritedStyle.ForeColor), new RectangleF((int)arrColumnLefts[iCount], iTopMargin, (int)arrColumnWidths[iCount], iHeaderHeight), strFormat); iCount++; } bNewPage = false; iTopMargin += iHeaderHeight; } iCount = 0; DataGridViewCell[] _GridCell = new DataGridViewCell[GridRow.Cells.Count]; int cellcount = 0; //Convert ltr to rtl foreach (DataGridViewCell Cel in GridRow.Cells) { _GridCell[cellcount++] = Cel; } //Draw Columns Contents //for (int i = (_GridCell.Count() - 1); i >= 0; i--) for (int i = 0; i <= (_GridCell.Count() - 1); i++) { if (_GridCell[i].Value != null) { e.Graphics.DrawString(_GridCell[i].FormattedValue.ToString(), _GridCell[i].InheritedStyle.Font, new SolidBrush(_GridCell[i].InheritedStyle.ForeColor), new RectangleF((int)arrColumnLefts[iCount], (float)iTopMargin, (int)arrColumnWidths[iCount], (float)iCellHeight), strFormat); } //Drawing Cells Borders e.Graphics.DrawRectangle(Pens.Black, new Rectangle((int)arrColumnLefts[iCount], iTopMargin, (int)arrColumnWidths[iCount], iCellHeight)); iCount++; } } iRow++; iTopMargin += iCellHeight; } //If more lines exist, print another page. if (bMorePagesToPrint) e.HasMorePages = true; else e.HasMorePages = false; //} //catch (Exception exc) //{ // MessageBox.Show(exc.Message, "Error", MessageBoxButtons.OK, // MessageBoxIcon.Error); //} } private void _printDocument_BeginPrint(object sender, System.Drawing.Printing.PrintEventArgs e) { try { strFormat = new StringFormat(); strFormat.Alignment = StringAlignment.Near; strFormat.LineAlignment = StringAlignment.Center; strFormat.Trimming = StringTrimming.EllipsisCharacter; arrColumnLefts.Clear(); arrColumnWidths.Clear(); iCellHeight = 0; iRow = 0; bFirstPage = true; bNewPage = true; // Calculating Total Widths iTotalWidth = 0; foreach (DataGridViewColumn dgvGridCol in gw.Columns) { iTotalWidth += dgvGridCol.Width; } } catch (Exception ex) { MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); } } } | cs |
출력을 할때는 버튼에 다음과 같은 소스를 추가하면됩니다.
"출력제목" 부분을 수정해서 원하는 제목으로 변경가능합니다.
1 2 3 4 5 | private void button3_Click(object sender, EventArgs e) { ClsPrint _ClsPrint = new ClsPrint(dataGridView1,"출력 제목"); _ClsPrint.PrintForm(); } | cs |
'프로그래밍 > c# & VB 등' 카테고리의 다른 글
[c#] mdb 특정 테이블의 컬럼 값을 불러오는 소스 (0) | 2016.04.04 |
---|---|
[C#] 두개의 mdb파일 내부에 있는 테이블을 합치는 코드 (0) | 2016.04.02 |
C# OCR opensource 사용하기 (0) | 2015.09.15 |
c# Interface를 이용한 부모폼과 자식폼간의 데이터 이동 (0) | 2015.06.01 |
c# mdb 파일간 테이블 옮기기 (0) | 2015.05.20 |