DATAGRID打印问题?

supicbc 2004-10-30 05:00:02
using System;
using System.Collections;
using System.ComponentModel;
using System.Drawing;
using System.Drawing.Printing;
using System.Data;
using System.Windows.Forms;

namespace TDSYS
{
/// <summary>
/// DataGridPrinter 的摘要说明。
/// </summary>

public class DataGridPrinter
{

private DataGrid dataGrid;
private PrintDocument printDocument;
private PageSetupDialog pageSetupDialog;
private PrintPreviewDialog printPreviewDialog;

public DataGridPrinter(DataGrid dataGrid)
{
this.dataGrid=dataGrid;
printDocument =new PrintDocument();
printDocument.PrintPage+=new PrintPageEventHandler(this.printDocument_PrintPage);
}
private void printDocument_PrintPage(object sender,System.Drawing.Printing.PrintPageEventArgs e)
{
int rowCount=0;
int colCount=0;
int x=0;
int y=0;
int rowGap=20;
int colGap=5;
int leftMargin=50;
Font font=new Font("Arial",10);
Font headingFont =new Font("Arial",11,FontStyle.Underline);
Font captionFont=new Font("Arial",10,FontStyle.Bold);
Brush brush=new SolidBrush(Color.Black);
string cellValue=dataGrid.DataSource.GetType().ToString();
cellValue="";
if(dataGrid.DataSource.GetType().ToString()=="System.Data.DataTable")
{
rowCount=((DataTable)dataGrid.DataSource).Rows.Count;
}
else if(dataGrid.DataSource.GetType().ToString()=="System.Collections.ArrayList")
{
rowCount=((ArrayList)dataGrid.DataSource).Count;
}
//colCount=dataGrid.TableStyles[0].GridColumnStyles.Count;
colCount=((DataTable)dataGrid.DataSource).Columns.Count ;

if(dataGrid.CaptionVisible)
{
y+=rowGap;
x=leftMargin;
e.Graphics.DrawString(dataGrid.CaptionText,captionFont,brush,x,y);
}
y+=rowGap;
x=leftMargin;
for(int j=0;j<colCount;j++)
{
if(dataGrid.TableStyles[0].GridColumnStyles[j].Width>0)
{
cellValue=dataGrid.TableStyles[0].GridColumnStyles[j].HeaderText;
e.Graphics.DrawString(cellValue,headingFont,brush,x,y);
x+=dataGrid.TableStyles[0].GridColumnStyles[j].Width+colGap;
}
}
for(int i=0;i<rowCount;i++)
{
x+=rowGap;
x=leftMargin;
for(int j=0;j<colCount;j++)
{
if(dataGrid.TableStyles[0].GridColumnStyles[j].Width>0)
{
cellValue=dataGrid[i,j].ToString();
e.Graphics.DrawString(cellValue,font,brush,x,y);
x+=dataGrid.TableStyles[0].GridColumnStyles[j].Width+colGap;
y=y+rowGap*(cellValue.Split(new char[] {'\r','\n'}).Length-1);
}
}
}
}

public PrintDocument GetPrintDocument()
{
return printDocument;
}

public void Print()
{
try
{
printPreviewDialog=new PrintPreviewDialog();
printPreviewDialog.Document=printDocument;
printPreviewDialog.ShowDialog();
}
catch(Exception e)
{
throw new Exception("Printer error."+e.Message);
}
}
}
}
为什么dataGrid.TableStyles[0].GridColumnStyles.Count,dataGrid.TableStyles[0].GridColumnStyles[j].Width>0会出现索引值问题?
经调试,rowCount/colCount的值正确。
...全文
176 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
happyjun2000 2004-11-01
  • 打赏
  • 举报
回复
一楼说的有理,细心调试一下
zhouyong2052 2004-10-30
  • 打赏
  • 举报
回复
又见到这个问题了,好像刚刚有一个,我已经回答了
swzlxm 2004-10-30
  • 打赏
  • 举报
回复
程序太长了.索引值出现问题肯定是长度不够,或不在其长度范围内,其它都不用看了.


单步调试就知分晓

111,096

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧