【问题标题】:customize a table (StiTable) at runtime in C# (.NET4)在运行时在 C# (.NET4) 中自定义表 (StiTable)
【发布时间】:2023-01-30 16:17:14
【问题描述】:

我正在研究 stimulsoft 2017.2.2 和 C# (.NET4)。 我设计了一个带有页脚和页眉的报告,它是 A4 并且里面有一个表格,基于 stimulsofts 方法(DataGrid)在运行时创建一个表格我设法将它更改为一个接受 DataTable 的报告并且一切正常在一个空项目(.mrt 文件)上。 有一个表所以我想在那里自定义它,调用它并在运行时自定义它。

问题是当我想将它添加到我自己的文件 (.mrt) 时,表格是空的,它只有 1 列并且行很好,整个表格是空的但设计是可见的。 所以,如果您能帮我解决这个问题,我将不胜感激。

我的方法是这样的:

private void PrintDataTable(string StiTableName, string DataSourceName, DataTable dataTable, StiReport report)
{

    DataView dataView = new DataView(dataTable);

    report.Compile();

    //script lang
    report.ScriptLanguage = StiReportLanguageType.CSharp;

    // Add data to datastore
    report.RegData(DataSourceName, dataView);

    // Fill dictionary
    report.Dictionary.Synchronize();

    //StiPage page = report.Pages.Items[0];

    // Create Table
    StiTable table = (StiTable)report[StiTableName];
    //StiTable table = (StiTable)report.GetComponentByName(StiTableName);
    table.DataSourceName = DataSourceName;
    table.AutoWidthType = StiTableAutoWidthType.LastColumns;
    table.ColumnCount = dataTable.Columns.Count;
    table.RowCount = 3;
    table.HeaderRowsCount = 1;
    table.FooterRowsCount = 1;
    //table.Width = page.Width;
    //table.Height = page.GridSize * 12;
    //table.DataSourceName = DataSourceName;
    table.CreateCell();
    table.TableStyleFX = new StiTable21StyleFX();
    table.TableStyle = Stimulsoft.Report.Components.Table.StiTableStyle.Style59;


    int indexHeaderCell = 0;
    int indexDataCell = dataTable.Columns.Count;
    //int indexDataCell = dataTable.Columns.Count;

    foreach (DataColumn column in dataView.Table.Columns)
    {
        // Set text on header
        StiTableCell headerCell = table.Components[indexHeaderCell] as StiTableCell;
        headerCell.Text.Value = column.Caption;
        headerCell.HorAlignment = StiTextHorAlignment.Center;
        headerCell.VertAlignment = StiVertAlignment.Center;


        StiTableCell dataCell = table.Components[indexDataCell] as StiTableCell;
        dataCell.HorAlignment = StiTextHorAlignment.Center;
        headerCell.VertAlignment = StiVertAlignment.Center;
        dataCell.Text.Value = "{" + DataSourceName + "." + Stimulsoft.Report.CodeDom.StiCodeDomSerializator.ReplaceSymbols(column.ColumnName) + "}";
        dataCell.Border = new StiBorder(StiBorderSides.All, Color.FromArgb(32, 178, 170), 1, StiPenStyle.Dash);
              
        indexHeaderCell++;
        indexDataCell++;
    }

    // Set text on footer
    StiTableCell footerCell = table.Components[table.Components.Count - 1] as StiTableCell;
    footerCell.Text.Value = "Count - {Count()}";
    footerCell.Font = new Font("Arial", 15, FontStyle.Bold);
    footerCell.VertAlignment = StiVertAlignment.Center;
    footerCell.HorAlignment = StiTextHorAlignment.Center;

}

谢谢你。

已经两周了,我什至尝试了其他方法,比如

report.GetComponentByName("Table1");

仍然没有, 我在短时间内真的需要这个, 感谢您的帮助。 谢谢你。

【问题讨论】:

    标签: c# methods stimulsoft


    【解决方案1】:

    这是一个修补程序:

    private void PrintTableFine(StiReport report ,DataTable dataTable)
            {
                DataView dataView = new DataView(dataTable);
    
                report.Load(Application.StartupPath + "\A4 Portrait.mrt");
    
                report.ScriptLanguage = StiReportLanguageType.CSharp;
    
                // Add data to datastore
                report.RegData("view", dataView);
    
                // Fill dictionary
                report.Dictionary.Synchronize();
    
                StiPage page = report.Pages.Items[0];
    
                // Create Table
                StiTable table = new StiTable();
                table.Name = "Table1";
                table.AutoWidthType = StiTableAutoWidthType.LastColumns;
                table.ColumnCount = dataTable.Columns.Count;
                table.RowCount = 3;
                table.HeaderRowsCount = 1;
                table.FooterRowsCount = 1;
                table.Width = page.Width;
                table.Height = page.GridSize * 12;
                table.DataSourceName = "view" + dataView.Table.TableName;
                page.Components.Add(table);
                table.CreateCell();
                table.TableStyleFX = new StiTable21StyleFX();
                table.TableStyle = Stimulsoft.Report.Components.Table.StiTableStyle.Style31;
    
                int indexHeaderCell = 0;
                int indexDataCell = dataTable.Columns.Count;
    
                foreach (DataColumn column in dataView.Table.Columns)
                {
                    // Set text on header
                    StiTableCell headerCell = table.Components[indexHeaderCell] as StiTableCell;
                    headerCell.Text.Value = column.Caption;
                    headerCell.Font = new Font("IRANSans(FaNum)", 10, FontStyle.Bold);
                    headerCell.HorAlignment = StiTextHorAlignment.Center;
                    headerCell.VertAlignment = StiVertAlignment.Center;
                    headerCell.Border = new StiBorder(StiBorderSides.All, Color.FromArgb(0, 0, 0), 1, StiPenStyle.Dash);
    
                    StiTableCell dataCell = table.Components[indexDataCell] as StiTableCell;
                    dataCell.Text.Value = "{view" + dataView.Table.TableName + "." +
                        Stimulsoft.Report.CodeDom.StiCodeDomSerializator.ReplaceSymbols(column.ColumnName) + "}";
                    dataCell.Font = new Font("IRANSans(FaNum)", 10, FontStyle.Regular);
                    dataCell.HorAlignment = StiTextHorAlignment.Center;
                    dataCell.VertAlignment = StiVertAlignment.Center;
                    dataCell.Border = new StiBorder(StiBorderSides.All, Color.FromArgb(0, 0, 0), 1, StiPenStyle.Dash);
    
                    indexHeaderCell++;
                    indexDataCell++;
                }
    
                // Set text on footer
                StiTableCell footerCell = table.Components[table.Components.Count - 1] as StiTableCell;
                //footerCell.Text.Value = "Count - {Count()}";
                footerCell.Font = new Font("IRANSans(FaNum)", 10, FontStyle.Regular);
                footerCell.VertAlignment = StiVertAlignment.Center;
                footerCell.HorAlignment = StiTextHorAlignment.Center;
            }
    

    实际上它创建了一个表。 请记住,像这样使用它:

    DataTable dt = new DataTable(); 
    
                StiReport report = new StiReport();
    
                //Reminder: compiling is after the table 
    
                //table: 
                PrintTableFine(report,dt);
    
                report.Compile();
    
                //adding a varieble:
                report["Varieble"] = "var1ا";
               
                report.Render(false);
                report.Show();
    

    只需给它一个数据表,它就会创建一个带有页眉和页脚的表格。 提醒:您将此表添加到的报告中不应该有一个 (Sti)TABLE IN IT(在设计中)。

    【讨论】:

      猜你喜欢
      • 2011-04-12
      • 2012-10-15
      • 1970-01-01
      • 2015-11-24
      • 2015-07-28
      • 2021-03-26
      • 2011-06-24
      • 1970-01-01
      • 2012-05-09
      相关资源
      最近更新 更多