zoukankan      html  css  js  c++  java
  • 在c#中动态生成水晶报表时,动态添加sort

    代码
    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字段。

    代码
     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的字段。

     上面的方法就可以。不知道这是为什么。

  • 相关阅读:
    对png空白部分取消button事件教程
    Flash Builder4.6破解方案(绝对有效)
    网页程序Flex动态嵌入字体
    老虎机等转动图片思路
    我认为最佳的新手引导制作办法
    26
    sql server 2005建立数据库,表,约束,账户密码,权限,基本查询删除语句
    ASP.NET入门教程:ASP.NET和ASP区别
    .net面试题及答案(一)(转)
    ASP.NET入门教程:认识ASP.NET
  • 原文地址:https://www.cnblogs.com/lfzwenzhu/p/1848739.html
Copyright © 2011-2022 走看看