在c#中动态生成水晶报表时,动态添加sort
2011-03-30 16:37
393 查看
private void SetSortQuick(ReportClientDocument objRPT)
{
if (!String.IsNullOrEmpty(this.SortField))
{
cCreateReport objCreateReport = new cCreateReport();
string[] arrySortField = this.SortField.Split(new char[] { ',' });
string[] arrySortDirection = this.SortDirection.Split(new char[] { ',' });
for (int i = 0; i < arrySortField.Length; i++)
{
string[] arryTemp = arrySortField[i].Split(new char[] { '|' });
string strFieldName = arryTemp[0];
string strFieldType = arryTemp[1].ToLower();
string strFormula = "", strFormulaName = "";
switch(strFieldType)
{
case "datetime":
strFormula = "date({" + arrySortField[i] + "})";
break;
case "numeric":
case "int":
case "money":
case "float":
strFormula = "ToNumber({" + arrySortField[i] + "})";
break;
default:
strFormula = "{" + arrySortField[i] + "}";
break;
}
strFormulaName = "Order" + i.ToString();
objRPT.DataDefController.FormulaFieldController.AddByName(strFormulaName, strFormula, CrFormulaSyntaxEnum.crFormulaSyntaxCrystal);
ISCRField objS = objRPT.DataDefController.FindFieldByFormulaForm("{@"+strFormulaName+"}");
if (objRPT.DataDefController.SortController.CanSortOn(objS))
{
SortClass objSort = new SortClass();
objSort.SortField = objS;
int countOfSort = objRPT.DataDefinition.Sorts.Count;
if (arrySortDirection[i] == "1")
{
objSort.Direction = CrSortDirectionEnum.crSortDirectionDescendingOrder;
}
else
{
objSort.Direction = CrSortDirectionEnum.crSortDirectionAscendingOrder;
}
objRPT.DataDefController.SortController.Add(countOfSort, objSort);
}
}
}
}
必须使用这种方式才可以动态添加公式为排序字段
objRPT.DataDefController.FormulaFieldController.AddByName(strFormulaName, strFormula, CrFormulaSyntaxEnum.crFormulaSyntaxCrystal);
ISCRField objS = objRPT.DataDefController.FindFieldByFormulaForm("{@"+strFormulaName+"}");
我试图使用如下方式动态添加公式字段,但是用CanSortOn检测总是不能作为sort字段。
![](http://writeblog.csdn.net/kf/UploadFiles_7205/201010/2010101408594598.gif)
代码
public void AddFormula(ReportClientDocument oReportClientDocument,
string szName,
string szFormula,
CrFieldValueTypeEnum crFieldValueType
)
{
FormulaField oFormulaField;
oFormulaField = new FormulaField();
oFormulaField.Name = szName;
oFormulaField.Text = szFormula;
oFormulaField.Syntax = CrFormulaSyntaxEnum.crFormulaSyntaxCrystal;
oFormulaField.Type = crFieldValueType;
oReportClientDocument.DataDefController.FormulaFieldController.Add(oFormulaField);
}
代码
public FormulaField FindFormulaField(ReportClientDocument oReportClientDocument, string szFormula)
{
FormulaField oFormulaField;
Fields oFields;
int iIndex;
oFormulaField = new FormulaFieldClass();
oFields = oReportClientDocument.DataDefinition.FormulaFields;
iIndex = oFields.Find(szFormula, CrFieldDisplayNameTypeEnum.crFieldDisplayNameName, CeLocale.ceLocaleUserDefault);
oFormulaField = ((FormulaField)oFields[iIndex]);
return oFormulaField;
}
后来我发现找到的公式字段的IsRecurring属性是false.只有这个属性为true时才可以作为sort的字段。
{
if (!String.IsNullOrEmpty(this.SortField))
{
cCreateReport objCreateReport = new cCreateReport();
string[] arrySortField = this.SortField.Split(new char[] { ',' });
string[] arrySortDirection = this.SortDirection.Split(new char[] { ',' });
for (int i = 0; i < arrySortField.Length; i++)
{
string[] arryTemp = arrySortField[i].Split(new char[] { '|' });
string strFieldName = arryTemp[0];
string strFieldType = arryTemp[1].ToLower();
string strFormula = "", strFormulaName = "";
switch(strFieldType)
{
case "datetime":
strFormula = "date({" + arrySortField[i] + "})";
break;
case "numeric":
case "int":
case "money":
case "float":
strFormula = "ToNumber({" + arrySortField[i] + "})";
break;
default:
strFormula = "{" + arrySortField[i] + "}";
break;
}
strFormulaName = "Order" + i.ToString();
objRPT.DataDefController.FormulaFieldController.AddByName(strFormulaName, strFormula, CrFormulaSyntaxEnum.crFormulaSyntaxCrystal);
ISCRField objS = objRPT.DataDefController.FindFieldByFormulaForm("{@"+strFormulaName+"}");
if (objRPT.DataDefController.SortController.CanSortOn(objS))
{
SortClass objSort = new SortClass();
objSort.SortField = objS;
int countOfSort = objRPT.DataDefinition.Sorts.Count;
if (arrySortDirection[i] == "1")
{
objSort.Direction = CrSortDirectionEnum.crSortDirectionDescendingOrder;
}
else
{
objSort.Direction = CrSortDirectionEnum.crSortDirectionAscendingOrder;
}
objRPT.DataDefController.SortController.Add(countOfSort, objSort);
}
}
}
}
必须使用这种方式才可以动态添加公式为排序字段
objRPT.DataDefController.FormulaFieldController.AddByName(strFormulaName, strFormula, CrFormulaSyntaxEnum.crFormulaSyntaxCrystal);
ISCRField objS = objRPT.DataDefController.FindFieldByFormulaForm("{@"+strFormulaName+"}");
我试图使用如下方式动态添加公式字段,但是用CanSortOn检测总是不能作为sort字段。
![](http://writeblog.csdn.net/kf/UploadFiles_7205/201010/2010101408594598.gif)
代码
public void AddFormula(ReportClientDocument oReportClientDocument,
string szName,
string szFormula,
CrFieldValueTypeEnum crFieldValueType
)
{
FormulaField oFormulaField;
oFormulaField = new FormulaField();
oFormulaField.Name = szName;
oFormulaField.Text = szFormula;
oFormulaField.Syntax = CrFormulaSyntaxEnum.crFormulaSyntaxCrystal;
oFormulaField.Type = crFieldValueType;
oReportClientDocument.DataDefController.FormulaFieldController.Add(oFormulaField);
}
代码
public FormulaField FindFormulaField(ReportClientDocument oReportClientDocument, string szFormula)
{
FormulaField oFormulaField;
Fields oFields;
int iIndex;
oFormulaField = new FormulaFieldClass();
oFields = oReportClientDocument.DataDefinition.FormulaFields;
iIndex = oFields.Find(szFormula, CrFieldDisplayNameTypeEnum.crFieldDisplayNameName, CeLocale.ceLocaleUserDefault);
oFormulaField = ((FormulaField)oFields[iIndex]);
return oFormulaField;
}
后来我发现找到的公式字段的IsRecurring属性是false.只有这个属性为true时才可以作为sort的字段。
相关文章推荐
- 在c#中动态生成水晶报表时,动态添加sort
- asp.net C#动态添加创建生成button按钮控件没有触发执行响应click绑定事件处理
- 水晶报表中动态添加字段
- C#动态生成控件以及添加事件处理
- C#动态生成控件以及添加事件处理
- C#中为水晶报表动态动态设置数据源
- C#动态添加控件,并生成事件
- C# 一个通过.xsd文件动态绑定数据的水晶报表
- 在水晶报表中动态的添加自己所需要的的字段的代码
- 在水晶报表中动态的添加自己所需要的的字段
- C#水晶报表显示sqlserver2000储存的图片 C#水晶报表动态显示sqlserver储存的图片
- 在水晶报表中插入子报表,并动态添加数据源
- 如何在水晶报表中添加条形码-winform ,c#.net
- 在水晶报表中动态的添加自己所需要的的字段的代码
- 在水晶报表中动态的添加自己所需要的的字段
- C#动态生成控件以及添加事件处理
- java 开发水晶报表动态参数添加
- 在水晶报表中动态的添加自己所需要的的字段的代码
- 如何在水晶报表中动态添加字段
- 水晶报表问题汇总(水晶报表的使用与查询条件生成报表、注册码、打印问题、模式使用示例、C#.Net的WinForm中的使用、程序发布与部署)