如何动态修改列宽

因为报表打印纸张是固定的,但是数据是动态的,尝尝有的列数据会内容多,需要换行显示,而有些数据有较少,一行空间较大,所以我们会很希望,报表更智能点,能够根据数据项的长度来自动调节列宽,那本文就来介绍如何实现动态修改列宽的功能。

发布于 2016/08/29 00:00

ActiveReports

因为报表打印纸张是固定的,但是数据是动态的,尝尝有的列数据会内容多,需要换行显示,而有些数据有较少,一行空间较大,所以我们会很希望,报表更智能点,能够根据数据项的长度来自动调节列宽,那本文就来介绍如何实现动态修改列宽的功能。

1. 新建WinForm 程序

image

2. 新建区域报表

image

3. 为区域报表绑定数据

image

4. 选择区域报表的脚本选项,实现ActiveReport_ReportStart 方法


public void ActiveReport_ReportStart()
{
}


5. 实现GetColumnWidth 方法,根据数据库的数据长度设置宽度。


public float GetColumnWidth()
{
    using (SqlConnection connection = new SqlConnection("user id=sa;data source=localhost;initial catalog=TestDB1;password=xA123456;"))
    {
        SqlDataAdapter adapter = new SqlDataAdapter("select top 1 列宽 from 报表列宽 ", connection);
        DataTable dt = new DataTable();
        adapter.Fill(dt);
        return float.Parse(dt.Rows[0][0].ToString());
    }
}


6. 完善ActiveReport_ReportStart  方法

动态设置列宽,并修改相关数据控件的坐标值。

public void ActiveReport_ReportStart()
{
    float oldWidth = 0;
    float newWidth = GetColumnWidth();
    // 查找到产品名称列
    ARControl lbHeader = null;
    foreach (ARControl item in this.pageHeader.Controls)
    {
        if (item.Name == "lbHProductName")
        {
            oldWidth = item.Width;
            item.Width = newWidth;
            lbHeader = item;
        }
    }
    foreach (ARControl item in this.pageHeader.Controls)
    {
        if (item.Name.StartsWith("lbH") & item.Location.X > lbHeader.Location.X)
        {
            item.Location = new PointF(item.Location.X + newWidth - oldWidth, item.Location.Y);
        }
    }
    foreach (ARControl item in this.pageHeader.Controls)
    {
        if (item.Name == "txtDProductName")
        {
            oldWidth = item.Width;
            item.Width = newWidth;
            lbHeader = item;
        }
    }
    foreach (ARControl item in this.detail.Controls)
    {
        if (item.Name == "txtDProductName")
        {
            item.Width = newWidth;
        }
        else if (item.Name.StartsWith("txtD") & item.Location.X > lbHeader.Location.X)
        {
            item.Location = new PointF(item.Location.X + newWidth - oldWidth, item.Location.Y);
        }
    }
}


源码下载:



动态列宽区域报表实现方法.zip

 

您在使用产品过程中有任何疑问,可以登录葡萄城开发者社区和经验丰富的技术工程师、ActiveReports开发人员交流:了解更多

了解ActiveReports产品更多特性:

/developer/activereports

下载产品体验产品功能:

/download/?pid=16

ActiveReports 报表控件| 下载试用

ActiveReports 是一款专注于 .NET 平台的报表控件,全面满足 HTML5 / WinForm / ASP.NET / ASP.NET MVC / WPF 等平台下报表设计和开发工作需求,作为专业的报表工具为全球超过 300,000 开发人员提供了全面的报表开发服务。

您对ActiveReports产品的任何技术问题,都有技术支持工程师提供1对1专业解答,点击此处即可发帖提问>>技术支持论坛

相关产品
推荐相关案例
关注微信
葡萄城社区二维码

关注“葡萄城社区”

加微信获取技术资讯

加微信获取技术资讯

想了解更多信息,请联系我们, 随时掌握技术资源和产品动态