往往在做报表的时候,不是拽出来的每一字段都是合适每一个客户的电脑的,也就是报表内容整体偏向左或偏向右,这些可能性都是存在的。如果每一次都要因为这改来改去,等于做许多无用功。
// 实例化报表
CryTCL crystal = new CryTCL();
// 登录信息
crystal.SetDatabaseLogon(clsConn.DATABASE_LOG ,clsConn.DATABASE_IPPASSWPRD,clsConn.DATABASE_ADDRESS,clsConn.DATABASE_NAME );
// 绑定数据源(datatable)
crystal.SetDataSource( this .crydDs( this .sqlwhere ).Tables[ 0 ]);
// 调用动态的字段方法
setLocal(crystal);
this .cryViewTCL.ReportSource = crystal ;
this .cryViewTCL.Refresh();
/**/ /// <summary>
/// 给水晶报表字段的属性传参数
/// </summary>
/// <param name="report"></param>
private void setLocal(CrystalDecisions.CrystalReports.Engine.ReportDocument report )
{
//水平
for(int m= 1;m< 74;m++) //m< 74 --> 报表的字段数
{
FieldObject fobj = (FieldObject)report.ReportDefinition.ReportObjects["Field"+m];
//1厘米=566.6666 缇,这里我是通过配置文件来取值的,这个可以根据每个人所喜欢来做
//0.1 * Convert.ToInt32(clsIO.GetKeyValue("leftToMiddle"))表示毫米=厘米*0.1
Double left = fobj.Left + 0.1 * Convert.ToDouble(clsIO.GetKeyValue("leftToMiddle")) * 566.6666 ;
fobj.Left = Convert.ToInt32(left);
}
//坚直
for(int m= 1;m< 74;m++)
{
FieldObject fobj = (FieldObject)report.ReportDefinition.ReportObjects["Field"+m];
//Double left ;
Double top = fobj.Top + 0.1 * Convert.ToDouble(clsIO.GetKeyValue("topToMiddle")) * 566.6666 ;
fobj.Top = Convert.ToInt32(top);
}
}
如果有什么写得不对的,请各位多多指教。谢谢