ActiveReports区域报表中动态列报表实现方法 文章中介绍了区域报表中动态列报表的实现方法,本文将结合页面报表中的表格(Table)控件来介绍如何实现动态列报表。展示的报表是一份订单列表,默认情况下显示订单的全部数据列,如果用户想隐藏不分列,可以在界面中直接指定数据列。

第一步:创建一个 ASP.NET 应用程序。

第二步:在工程中添加一个Default.aspx页面,在页面中添加一个CheckBoxList控件,用于显示订单报表中全部的数据列,用户可以通过选择/不选择操作来指定报表中显示的列信息。

第三步:在Default.aspx页面中添加WebViewer控件,其它属性保存默认设置。

第四步:添加一个名为PageReport1.rdlx的页面报表,然后添加报表数据源(该报表显示NWind_CHS.mdb数据库中订单数据表的数据),最后在报表设计界面添加一个表格(Table)控件,指定表格每一列对应的数据库字段,最终得到如下结果:

image

第五步:在Default.aspx页面的后台代码中添加以下代码,用于显示/隐藏报表中的数据列:

    // 加载报表
    private void LoadReport()
    {
        GrapeCity.ActiveReports.PageReport report1 = new GrapeCity.ActiveReports.PageReport(new System.IO.FileInfo(Server.MapPath("PageReport1.rdlx")));
        // 只显示选中的列,未选中列不出现在报表中
        SetSelectedColumns(report1);
        report1.Report.DataSources[0].ConnectionProperties.ConnectString = "provider=Microsoft.Jet.OLEDB.4.0;data source=" + Server.MapPath("App_Data\\NWind_CHS.mdb");
        WebViewer1.Report = report1;
    }
    // 设置表格中列的显示状态
    private void SetSelectedColumns(GrapeCity.ActiveReports.PageReport report)
    {
        foreach (ListItem item in cblColumns.Items)
        {
            SetSelectedColumn(report, item.Text, item.Selected);
        }
    }
    // 设置单列的显示状态
    private void SetSelectedColumn(GrapeCity.ActiveReports.PageReport report, string columnname, bool hidden)
    {
        string datafield = "";
        GrapeCity.ActiveReports.PageReportModel.Table table = report.Report.Body.ReportItems[0] as GrapeCity.ActiveReports.PageReportModel.Table;
        for (int i = 0; i < table.TableColumns.Count; i++)
        {
            datafield = (table.Header.TableRows[1].TableCells[i].ReportItems[0] as GrapeCity.ActiveReports.PageReportModel.TextBox).Value.ToString();
            if (string.Equals(datafield, columnname))
            {
                table.TableColumns[i].Visibility.Hidden = (!hidden).ToString();
                return;
            }
        }
    }

 

运行截图:

image

 

源码下载:VS2010 + ActiveReports 8