如何在水晶报表中以编程方式编辑标签?

时间:2010-11-10 19:49:00

标签: c# crystal-reports reporting

我有一个Crystal Reports报告,我想从c#以编程方式编辑标签。我可以操纵数据源,但不能编辑标签。

我正在设计帐单报告,因此我需要显示公司详细信息,日期时间以及我无法从数据源获取的其他一些信息。

3 个答案:

答案 0 :(得分:3)

您需要将此Label FomulaField作为FormulaFieldDefinitions,然后可以通过FormulaFieldDefinition集合访问,您将使用{{1}}类对象你感兴趣的。

此外,应始终将此类公司信息等直接放在报表本身,即编辑后的RPT文件中。在谈到公司的标识时,您希望这样做。

答案 1 :(得分:2)

通常对于账单,公司名称及其详细信息(如地址等)显示在账单的顶部。在这种情况下,我使用的是报告标题。在这种情况下,您可以非常轻松地传递要显示的文本。在运行时传递某些内容的另一种方法是使用report参数。您可以将参数绑定到字段或公式。参数也很容易传递。

有一次,我使用以下代码动态获取报表中的参数并将其绑定到gridview:

    private void GetParameters()
    {
        //DataTable dt = new DataTable("Params");
        string dataTableName  = "Params";
        //add a tablestyle to the grid so there will be custom columnstyles available
        // after the datasource has been set....
        DataGridTableStyle ts = new System.Windows.Forms.DataGridTableStyle();
        ts.MappingName = dataTableName;
        dtgParams.TableStyles.Add(ts);

        // DataGridTextBoxColumn
        DataGridTextBoxColumn cParamName = new DataGridTextBoxColumn();
        cParamName.MappingName = "Parameter";
        cParamName.HeaderText = "Parameter";
        cParamName.ReadOnly=true;

        // Add the column style to the column style collection
        ts.GridColumnStyles.Add( cParamName );

        // DataGridTextBoxColumn
        DataGridTextBoxColumn cType = new DataGridTextBoxColumn();
        cType.MappingName = "Data_Type";
        cType.HeaderText = "Data Type";
        cType.ReadOnly=true;

        // Add the column style to the column style collection
        ts.GridColumnStyles.Add( cType );

        // DataGridTextBoxColumn
        DataGridTextBoxColumn cValue = new DataGridTextBoxColumn();
        cValue.MappingName = "Value";
        cValue.HeaderText = "Value";
        cValue.ReadOnly=false;

        // Add the column style to the column style collection
        ts.GridColumnStyles.Add( cValue );

        DataRow dr;
        dt.Columns.Add(new DataColumn("Parameter",typeof(string)));
        dt.Columns.Add(new DataColumn("Data_Type",typeof(string)));
        dt.Columns.Add(new DataColumn("Value",typeof(string)));

        // For all the Parameters defined in the report
        for(int i=0;i<ReportDoc.DataDefinition.ParameterFields.Count;  i++)
        {
            dr = dt.NewRow();
            dr[0] = ReportDoc.DataDefinition.ParameterFields[i].ParameterFieldName;
            dr[1] = ReportDoc.DataDefinition.ParameterFields[i].ParameterValueKind;
            dr[2] = ReportDoc.DataDefinition.ParameterFields[i].DefaultValues[0];
            dt.Rows.Add(dr);
        }
        DataView source = new DataView(dt);
        dtgParams.DataSource = source;
    }

并使用以下代码段设置参数:

    private void SetParamValue  (string paramName, string paramValue)
    {
        ParameterFieldDefinition PFD = null;
        ParameterValues PValues = null;
        ParameterDiscreteValue Parm = null;
        PValues = new ParameterValues();
        PFD = ReportDoc.DataDefinition.ParameterFields[paramName];
        Parm = new ParameterDiscreteValue();
        Parm.Value = paramValue;
        PValues.Add(Parm);
        PFD.ApplyCurrentValues(PValues);
    }

答案 2 :(得分:0)

看看CR Object Model。你可以以编程方式控制的内容是有限的,但这应该会有所帮助。