跪求C#用毫米表示DataGridView高度的方法
在C#编程打印表格内容时,由于DataGridView表格各行的高度可能不一致,所以要用一个行高计数器累加当前行高的数值,然后与纸张高度作比较以计算总页数,我想用以下代码来计算当前累计行高:
/*假定:
prtDoc为printdocument对象;
标题及表头与表脚每页占用的高度为fixedH(像素值);
纸张页边距以内高度为e.MarginBounds.Height(百分之一英寸);
每页可留给表格主体的打印空间高度为prtH=e.MarginBounds.Height-fixedH;
[两个值的单位不统一]
*/
private void prtDoc_PrintPage( object sender, PrintPageEventArgs e )//在打印事件中写的代码
{
int countH=0;行高统计
int sumPg=1;//页数统计
foreach (DataGridViewRow r in prtdgv.Rows) //prtdgv是一个DataGridView对象
{
if( r.IsNewRow || !r.Selected ) { Continue;}
countH += r.Height;
if(countH>prtH)//比较表体与可打印区高度,这里两个值的单位不统一
{
sumPg++;//若高度超出可打印高度,则页数递增
countH=r.Height;//复位计数器,当前行高因超出打印范围,故累加到下页
}
}
}
上述代码的问题是:DataGridView行高以及用e.MeasureString方法得到的字符高度均以像素
来表示的,而纸张的边距、可打印区域的数值是以百分之一英寸表示的,这是C#的规则,如果想在打印之前先算出所需总页数,就必须把像素值和百分之一英寸这两个单位统一起来,这就是问题的关键。
我试过在这个事件中用e.Graphics.PageUnit = GraphicsUnit.Millimeter;来统一单位,但页面单位及表格高度的单位系统并未自动转换为Millimeter;
希望各位知情者给予解答。这样我就能事先算出有多少页,在每页的页脚打印这样的页码:[第?页,共?页]。
我当前可用分只有180,用详细代码解答者,我全部奉送! 望不吝赐教,先行谢过!
------解决方案--------------------要不LZ用水晶报表吧,要打印的时候报表自己计算高度
------解决方案--------------------LZ用printDocument打印表格挺麻烦的,光是计算文字之间的间距什么就够麻烦了,最好还是用水晶报表,这个很简单,做好报表,打印的时候用表格填充一下报表就可以打印了
------解决方案--------------------