找回密码
 立即注册

QQ登录

只需一步,快速开始

yin_tb
高级会员   /  发表于:2019-5-17 19:41:51
11#
我改的你说的示例flexgridreort,把c1report替换成了flexreport,数据源未改,代码稍有修改,你试下。开发环境 visual studio 2015, C1版本4.0.20181.296

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 使用道具 举报
yin_tb
高级会员   /  发表于:2019-5-18 12:24:08
12#
经过不懈努力,我终于研究出truedbgrid所见即所得了,在with tgrid1.printinfo下,即打印预览配置信息下,有两个属性指定上,如下:
.pagebreak=printinfo.pagebreaksEnum.onsplit  '不压缩一页,在分割器处插入分隔符。
.fillAreaWidth=printinfo.FillEmptyEnum.None  ‘最重要,不扩展列,空白区域
希望后来有其它朋友需要时,可参照此例。
研究过程是,我用导出方法tgrid.exportto()时,发现导出框中的一些参数,我做了调整,结果导到Excel中格式正常了,我接着预览,发现预览自动继承了我导出框的参数属性,所以,我想到了加上上面两个属在在打印预览之前。
此例的前提是,你如果列很多,且有左右页边距,纸型小,如A4,那么列仍然不是所见即所得,会自动有小调整,但如果用A3纸型,即,虽然列多,但足以容纳边距+所有列宽,系统是不会调整的,我没有A3打印机,所以没测试打印效果,但预览正常,相信打印没问题。

问题继续:谢谢Richard.Ma,但我上面的问题仍未解决,就是我发副本示例附件的这个,让代码定义的flexreport的各列宽,能等于flexgrid列宽,希望能给测试下原因。

评分

参与人数 1金币 +500 收起 理由
Richard.Ma + 500 很给力!

查看全部评分

回复 使用道具 举报
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2019-5-20 09:14:13
13#
,谢谢分享truedbgrid打印预览所见即所得,

c1report这个问题我今天帮你测试确认
回复 使用道具 举报
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2019-5-20 11:36:34
14#
比较了一下,效果应该是一致的,不知道你说的不一样是指哪里,
为了对比效果比较明显,做了如下的代码调整
  1. private void Form1_Load(object sender, System.EventArgs e)
  2.         {
  3.             // populate grid
  4.             string mdbFile =
  5.                 Environment.GetFolderPath(Environment.SpecialFolder.Personal) +
  6.                 @"\ComponentOne Samples\Common\C1NWIND.MDB";
  7.             string conn = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + mdbFile + ";";
  8.             string rs = "select * from customers";
  9.             OleDbDataAdapter da = new OleDbDataAdapter(rs, conn);
  10.              da.Fill(dt);
  11.             _flex.DataSource = dt;
  12.             _flex.Cols[0].Width = _flex.Rows[0].HeightDisplay;
  13.             _flex.Cols[2].Width = 160;
  14.             _flex.ShowCursor = true;
  15.             


  16.         }

  17.                 // build report to show all fields in a flex control
  18.                 private void BuildReportDefinition()
  19.                 {
  20.                         // initialize report
  21.                         clfr.Clear();
  22.             clfr.Layout.Orientation = OrientationEnum.Landscape;
  23.                         clfr.Layout.MarginLeft = 500;
  24.            
  25.             // add header section
  26.             Section s = clfr.Sections[SectionTypeEnum.Header];
  27.                         s.Visible = true;
  28.                         s.Height = 700;
  29.                         Field f = s.Fields.Add("fldTitle", "Flex-based report", 0, 0, 4000, 700);
  30.                         f.Font = new Font("Tahoma", 14, FontStyle.Bold);

  31.                         // add page header and detail sections
  32.                         Section sHdr = clfr.Sections.PageHeader;
  33.                         sHdr.Visible = true;
  34.                         sHdr.Height = 400;

  35.                         Section sDtl = clfr.Sections.Detail;
  36.                         sDtl.Visible = true;
  37.                         sDtl.Height = 300;

  38.                         // populate header and detail sections
  39.                         Font fntHdr = new Font("Tahoma", 8, FontStyle.Bold | FontStyle.Underline);
  40.                         Font fntDtl = new Font("Tahoma", 8, FontStyle.Regular);

  41.             Single  twidth=200;//初始左边距,用于累计下一字段的left
  42.             TextField t1;
  43.                         foreach (Column col in _flex.Cols)
  44.                         {
  45.                 // calculate field rectangle in twips
  46.                 // create field in page header section
  47.                 t1 = new TextField();
  48.                 t1.Name = "fh" + col.Name;
  49.                 t1.Text =  col.Name;
  50.                 t1.Left = twidth;
  51.                 t1.Width = col.WidthDisplay * 1440/96;
  52.                                 t1.Height = (int)sHdr.Height;
  53.                 sHdr .Fields.Add(t1);

  54.                 // create field in detail section
  55.                 t1 = new TextField();
  56.                 t1.Name = "fd" + col.Name;
  57.                 t1.Text.Expression = col.Name;
  58.                 t1.WordWrap=false;
  59.                 t1.Left = twidth;
  60.                 t1.Width = col.WidthDisplay * 1440/96;
  61.                 t1.Height = (int)sHdr.Height;
  62.                 t1.Border.Style = C1.Win.C1Document.DashStyle.Solid;
  63.                 t1.Border.Color = Color.Red;
  64.                 t1.Border.Width = 2;
  65.                 t1.Border.Bottom.Width = 0;
  66.                 sDtl.Fields.Add(t1);

  67.                 twidth = twidth + col.WidthDisplay * 1440/96; //将左边距的值设到上一字段后的位置
  68.             }
  69.             
  70.             clfr.DataSource.RecordSourceType = C1.Win.FlexReport.RecordSourceType.Auto;
  71.             clfr.DataSource.Recordset = dt;

  72.         }
复制代码
回复 使用道具 举报
yin_tb
高级会员   /  发表于:2019-5-21 09:40:15
15#
你看我发的附件图,看前几个列标题,宽度是不一样的,有的自动换行了。也许我的想法就是不对的吧,难道是像素与缇之间的转换有误差?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 使用道具 举报
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2019-5-21 14:37:00
16#
可以设置不自动换行,其他的宽度都是一致的,你可以用我发上来的代码修改后对比下

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 使用道具 举报
yin_tb
高级会员   /  发表于:2019-5-22 09:53:50
17#
谢谢这些天的帮助,这个问题我不再纠结下去了。咱们代码的逻辑是对的,或许这本身是不同的两个组件,视觉上肯定是不可能一样的。你给我发的图我看到垂直标线了,基本一致,有稍许误差,呵呵。不能再吹毛求疵了。
再次表示感谢。
回复 使用道具 举报
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2019-5-22 10:14:50
18#
哈哈,不客气,确实只是视觉效果上的差异,实际的尺寸是完全一致的,毕竟是代码直接计算的,
回复 使用道具 举报
12
您需要登录后才可以回帖 登录 | 立即注册
返回顶部