我有一个Crystal Reports报告,我想从c#以编程方式编辑标签。我可以操纵数据源,但不能编辑标签。
我正在设计帐单报告,因此我需要显示公司详细信息,日期时间以及我无法从数据源获取的其他一些信息。
答案 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。你可以以编程方式控制的内容是有限的,但这应该会有所帮助。