文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>在c#中动态生成水晶报表时,动态添加sort

在c#中动态生成水晶报表时,动态添加sort

时间:2010-10-12  来源:空紫竹

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

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

 

 

相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载