zoukankan      html  css  js  c++  java
  • 水晶报表打印

    1.数据源的使用,当从外部添加数据库文件或更新数据库文件时,可以直接将解决方案中的数据库文件替换掉,但是如果程序设计界面中用到了数据绑定,涉及到了数据源的话,如果要将数据源中的内容也更新的话,可以从服务器资源管理器中直接拖过来。(我太傻了,以前都不知道)

    2.为报表绑定数据集

    3.在报表中如果用到了某一个数据库中的多个表。为一个报表填充某一个数据集时,可以设置将多个表填充到数据集中,然后再将数据集填充给报表。

    //填充数据集
    detialListTableAdapter1.Fill(sendProductDataSet1.DetialList,hadRows);
    sendTotalListTableAdapter1.Fill(sendProductDataSet1.SendTotalList,hadRows);

    #region 判断记录是否够7行,如果不够,加空白行;

    int currentRecordCount = sendProductDataSet1.DetialList.Rows.Count;
    if (currentRecordCount < recordCount)
    {
    int jj = recordCount - currentRecordCount;
    for (int i = 0; i < jj; i++)
    {
    DataRow dr = sendProductDataSet1.DetialList.NewRow();
    sendProductDataSet1.DetialList.Rows.Add(dr);
    }
    }

    #endregion
    #region 创建报表实例
    CrystalReportSend sendReport = new CrystalReportSend();
    sendReport.SetDataSource(sendProductDataSet1);
    ReportDocument document = (ReportDocument)sendReport;
    this.crystalReportViewer1.ReportSource = document;
    #endregion

    4.水晶报表中设计

      在页眉和页尾中的设置基本上没什么特殊的地方,如果想要在这两个地方显示什么内容,就将自己新加的字段或数据库字段放在此处即可正常显示。

      而在详细信息部分添加的内容则需要注意了,如果报表体中有多行内容格式相同,在这里只需要设计一行即可,在运行时,程序会根据填充的数据集按设置的报表详细信息中个格式依次显示,而不需要在设计时就画出多行。

    5.使用的小函数

    strSum = strSum.PadLeft(9, ' ');该函数为字符串的操作,如果字符转长度不够9为,在左边用空格填充。

    string.Format("{0:F2}", totalSum);将数字保存为字符串,并且保留两位小数

    6.为报表添加临时数据集,而不是填充数据库的数据集

    DataRow tdr = sendProductDataSet1.SendTotalList.AddSendTotalListRow(,,,,);AddSendTotalListRow为自动生成的对应数据库中表名的方法,其参数为对应数据库中各个字段的具体的值。

    注意:虽然可以为水晶报表填充临时的数据集,但是还要通过数据集这个中间的部分,填充后,如果临时数据集中的内容可能会回传到数据库中,所以还要清空一下。清空可以清空整个数据集,也可以清空指定的表,这里我清空了两个表

     sendProductDataSet1.DetialList.Clear();
     sendProductDataSet1.SendTotalList.Clear();

    因为整个程序中用到的数据集都是同一个,在其他的地方可能会用到某个表绑定到某个控件,清空整个数据集会出错,还是用到哪个清空那个。

    水晶报表在显示时,会将详细部分内容重复7次(这个不确定,有可能是根据详细部分设计窗格的高度自动调整的),如果数据集中数据不够7条,可以自己填充空白行

     DataRow dr = sendProductDataSet1.DetialList.NewRow();         
    sendProductDataSet1.DetialList.Rows.Add(dr);

    7.我的Windows程序写好之后有段时间一直是需要点击两下退出符号才可以退出,原来是在强制转换某个对象时,好象是没有判断是否为空、还是占用了什么资源导致的,解决办法是,占用的绑定表endEdit()在update一下。

    8.关于datagridview

    倒序删除datagridview中的内容

    int rowsSelectCount = dataGridViewSend.SelectedRows.Count;

    for (int i = rowsSelectCount; i >= 1; i--)//从下往上删,避免沙漏效应
    {
    dataGridViewSend.Rows.RemoveAt(dataGridViewSend.SelectedRows[i - 1].Index);
    }

    注意:datagridview的clear方法,这个虽说清空了内容,但只是我们看不到了,实际上还在,要用removeAt依次删除。

  • 相关阅读:
    软件工程阅读笔记02
    软件工程阅读笔记01
    四则运算二
    第十七周学习进度条
    个人总结以及建议
    写api接口神器--带你5分钟了解swagger
    nginx的配置和基本参数说明
    larval 使用redis做缓存
    Laravel——缓存使用
    开启redis-server提示 # Creating Server TCP listening socket *:6379: bind: Address already in use--解决方法
  • 原文地址:https://www.cnblogs.com/mebius4789/p/Crystal_print.html
Copyright © 2011-2022 走看看