我通过这段代码绑定了我的水晶报表,但是不知道在水晶报表里的公式字段该怎么设置,求助:
        求问怎么把数据集添加进水晶报表,并设置公式字段
     DataSet ds = workingDayAccess.GetAbsentDays(workingDays, Convert.ToDateTime(StartTime.Text),Convert.ToDateTime(EndTime.Text));
          
           CrystalReport1 cs1 = new CrystalReport1();
           cs1.Load(Server.MapPath("CrystalReport1.rpt"));
           cs1.SetDataSource(ds.Tables["AbsentDays"]);
           Report1.ReportSource = cs1;
           Report1.DataBind();
           Report1.Visible = true;在CrystalReport1.rpt中该怎么做?
     

解决方案 »

  1.   

    新建一个dataset 添加一张datatable (字段要和数据库的字段类型一致)
    把数据填充到dataset
    把datatable绑定到水晶报表
      

  2.   

    AbsentDays里的字段类型和数据库的一致?
      

  3.   

    这个dataTable是从数据库的一个表中取出来的,应该没什么问题吧!并且
     CrystalReport1 cs1 = new CrystalReport1(); 
              cs1.Load(Server.MapPath("CrystalReport1.rpt")); 
              cs1.SetDataSource(ds.Tables["AbsentDays"]); 
              Report1.ReportSource = cs1; 
              Report1.DataBind(); 
              Report1.Visible = true; 
    就是运行的时候数据没有显示出来
      

  4.   

    问题的关键是你的CrystalReport1是怎么做的。。
    现在看,貌似是个白板,里面啥也没有?,呵呵请参考本文之操作方法,照着做一下,很快有感觉
    【水晶报表内功心法】--PUSH模式样板招式 
      

  5.   

    CrystalReport1.rpt得先画好格式,布局好吧。。然后用push模式绑定数据
      

  6.   

    你数据从数据源里取出来的放进的datatable的字段格式也得和数据库一致
      

  7.   

    dataset不是
    DataSet ds=new DataSet();
    你添加一个dataset控件dataset1;
    里面生成一个 datatable1(列数和类型和数据库要显示的字段的类型一致);
    dataset1 ds1=new dataset();
    sqladapter.fill(ds1);
     Report1.ReportSource = ds1.Tables[0];
      

  8.   

    因为我的是需要传值的,所以不能放在page_load里边,这样就会出来那种要验证的情况,该怎么解决
      

  9.   


    参考
    http://topic.csdn.net/u/20090713/18/6e14bf28-1979-4ade-9c60-aaf09284553d.html中的2:WebForm开发的一个重要技巧:小代码,大作用 这一节。
      

  10.   

              String getAbsentDays = "select EmpID ,EmpName,?-count(sysdate) Absent from zRecord where sysDate between Convert(nvarchar(12),?,1) and Convert(nvarchar(12),?,1) group by EmpID ,EmpName";
               OleDbParameter workingDays = new OleDbParameter("workingDate", SqlDbType.DateTime);
               workingDays.Value = workdingDay;
               OleDbParameter start = new OleDbParameter("SysDate", SqlDbType.DateTime);
               start.Value = startTime;
               OleDbParameter end = new OleDbParameter("SysDate", SqlDbType.DateTime);
               end.Value = endTime;
               OleDbCommand cmd = new OleDbCommand(getAbsentDays, conn);
               cmd.Parameters.Add(workingDays);
               cmd.Parameters.Add(start);
               cmd.Parameters.Add(end);           OleDbDataReader dr = cmd.ExecuteReader();
               DataTable dt = new DataTable();
             
               int fieldCount = dr.FieldCount;
               for (int i = 0; i < fieldCount; i++)
               {
                   dt.Columns.Add(dr.GetName(i), dr.GetFieldType(i));
               }
               object[] objValues = new object[fieldCount];
                while (dr.Read())
                {
                 dr.GetValues(objValues);
                 dt.LoadDataRow(objValues, true);
                }
                dr.Close();
                dt.EndLoadData() ;            DataSet1 ds = new DataSet1();
        ds.Tables.Add(dt);        ReportDocument cs1 = new ReportDocument();
            cs1.Load(Server.MapPath("CrystalReport1.rpt"));
            cs1.SetDataSource(ds.Tables["AbsentDays"]);
            Report1.ReportSource = cs1;
            Report1.DataBind();
    这样写有问题么,怎么还出那个dataset的验证
      

  11.   

    你为啥要新建个dt。。直接fill出来不就得了单就你那个来说
    检查你设计报表是的dataset里的表,表名称和字段及类型,与你程序里传递进去的是否一致。
      

  12.   

    恩恩,那个地方确实有问题,现在改过来了我把数据都读到那个dataset1里的datatable中了,但是还是需要验证
      

  13.   

    用GridView显示出来是没有问题的,但是用水晶报表显示就需要那个验证
      

  14.   

    你的dataset是怎么设计的?切个图,或者把xsd的代码贴出来看看
      

  15.   

    <?xml version="1.0" encoding="utf-8"?>
    <xs:schema id="DataSet1" targetNamespace="http://tempuri.org/DataSet1.xsd" xmlns:mstns="http://tempuri.org/DataSet1.xsd" xmlns="http://tempuri.org/DataSet1.xsd" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:msprop="urn:schemas-microsoft-com:xml-msprop" attributeFormDefault="qualified" elementFormDefault="qualified">
      <xs:annotation>
        <xs:appinfo source="urn:schemas-microsoft-com:xml-msdatasource">
          <DataSource DefaultConnectionIndex="0" FunctionsComponentName="QueriesTableAdapter" Modifier="AutoLayout, AnsiClass, Class, Public" SchemaSerializationMode="IncludeSchema" xmlns="urn:schemas-microsoft-com:xml-msdatasource">
            <Connections />
            <Tables />
            <Sources />
          </DataSource>
        </xs:appinfo>
      </xs:annotation>
      <xs:element name="DataSet1" msdata:IsDataSet="true" msdata:UseCurrentLocale="true" msprop:Generator_UserDSName="DataSet1" msprop:Generator_DataSetName="DataSet1" msprop:EnableTableAdapterManager="true">
        <xs:complexType>
          <xs:choice minOccurs="0" maxOccurs="unbounded">
            <xs:element name="AbsentDays" msprop:Generator_UserTableName="AbsentDays" msprop:Generator_RowDeletedName="AbsentDaysRowDeleted" msprop:Generator_RowChangedName="AbsentDaysRowChanged" msprop:Generator_RowClassName="AbsentDaysRow" msprop:Generator_RowChangingName="AbsentDaysRowChanging" msprop:Generator_RowEvArgName="AbsentDaysRowChangeEvent" msprop:Generator_RowEvHandlerName="AbsentDaysRowChangeEventHandler" msprop:Generator_TableClassName="AbsentDaysDataTable" msprop:Generator_TableVarName="tableAbsentDays" msprop:Generator_RowDeletingName="AbsentDaysRowDeleting" msprop:Generator_TablePropName="AbsentDays">
              <xs:complexType>
                <xs:sequence>
                  <xs:element name="EmpId" msprop:Generator_UserColumnName="EmpId" msprop:Generator_ColumnVarNameInTable="columnEmpId" msprop:Generator_ColumnPropNameInRow="EmpId" msprop:Generator_ColumnPropNameInTable="EmpIdColumn" type="xs:int" minOccurs="0" />
                  <xs:element name="EmpName" msprop:Generator_UserColumnName="EmpName" msprop:Generator_ColumnVarNameInTable="columnEmpName" msprop:Generator_ColumnPropNameInRow="EmpName" msprop:Generator_ColumnPropNameInTable="EmpNameColumn" type="xs:string" minOccurs="0" />
                  <xs:element name="Absent" msprop:Generator_UserColumnName="Absent" msprop:Generator_ColumnVarNameInTable="columnAbsent" msprop:Generator_ColumnPropNameInRow="Absent" msprop:Generator_ColumnPropNameInTable="AbsentColumn" type="xs:int" minOccurs="0" />
                </xs:sequence>
              </xs:complexType>
            </xs:element>
          </xs:choice>
        </xs:complexType>
      </xs:element>
    </xs:schema>dataset的代码
      

  16.   

    dt.EndLoadData() ; 
    //加上一句
    dt.TableName="AbsentDays";
    Report1.DataBind(); 注释掉看看
      

  17.   

    界面上是不是只要一个CrystalReportView就行了?
      

  18.   

    OleDbDataReader dr = cmd.ExecuteReader();
    DataTable dtAbsentDay = ds.Tables["AbsentDays"];        object[] objValues = new object[dr.FieldCount];
            while (dr.Read())
            {
                dr.GetValues(objValues);
                dtAbsentDay.LoadDataRow(objValues,true);
            }
            dr.Close();
            GridView1.DataSource = dtAbsentDay;
            GridView1.DataBind();        ReportDocument cs1 = new ReportDocument();
            cs1.Load(Server.MapPath("CrystalReport1.rpt"));
            cs1.SetDataSource(ds);
            Report1.ReportSource = cs1;
    这是我现在的code,已经没有你说的那两个了,但是问题还没有解决
      

  19.   

    This field name is not known. Error in File C:\DOCUME~1\User\LOCALS~1\Temp\CrystalReport1 {E6F3385A-B83A-41B2-A0A3-DD61E43A9612}.rpt: Error in formula . '{命令.absence} > 0' This field name is not known
      

  20.   

    命令.absence 这是个什么东东按照你的xsd,你的报表里应该只有3个字段 EmpId,EmpName,Absent,表名是:AbsentDays
      

  21.   

    是不是绑定数据的时候出错的啊?
       ReportDocument cs1 = new ReportDocument();
            cs1.Load(Server.MapPath("CrystalReport1.rpt"));
            cs1.SetDataSource(ds);
            Report1.ReportSource = cs1;
           
    这是绑定的过程
     <CR:CrystalReportViewer ID="Report1" runat="server" AutoDataBind="True"
                Height="1039px"  Width="901px" />
            <CR:CrystalReportSource ID="CrystalReportSource1" runat="server">
               <Report FileName="CrystalReport1.rpt"></Report>
            </CR:CrystalReportSource>
    这个是界面的代码,我是新手,第一次接触水晶,今天弄这个弄了一天,没搞定
      

  22.   

    dataset的水晶报表时完全按照你说的步骤创建的,然后数据我也填充到dataset的表里了
     如果出问题的话,我感觉很有可能就是出在绑定这块了
      

  23.   

    对了,我创建的不是一个站点,是一个web的程序!如果模板做错了或者说模板和代码不配套我该怎么解决啊
      

  24.   

    web程序也可以的但是 {命令.absence} 这个东东你怎么弄到报表里去的?