请参考这个:
http://support.crystaldecisions.com/communityCS/FilesAndUpdates/csharp_win_dynamic_report_formula.exe.asp不行的话,再提出来,呵呵

解决方案 »

  1.   

    to:glboy(星毅)
    这个例子是动态添加显示字段呀,而我想实现的是报表的列显示的是同一个字段,只是值不一样!还没有解决!!!
      

  2.   

    我的意思是这样的:比如Table1中有一个字段Type,字段Type的值为1,2,3,4...
    我想显示的格式如下:     1 2 3 4 ...
    Row1
    Row2
    Row3
    ...也就是,Type有几个值,那该报表就有几个列.
      

  3.   

    Row1
    Row2
    Row3
    ...它的值是根据什么来生成的?还是没值的?
      

  4.   

    Row1
    Row2
    Row3
    ...它们的值和与Type字段一样,都是从Table1中取得的.就是想办法把Type显示出来.
      

  5.   

    declare @sql varchar(8000)
    set @sql = 'select 分组的列,'
    select @sql = @sql + 'sum(case Type when '''+Type+''' 
                              then 求的数量列名 else 0 end) as '''+Type+''','
      from (select distinct Type from table1) as aselect @sql = left(@sql,len(@sql)-1) + ' from table1 group by 分组的列'exec(@sql)
    go
      

  6.   

    http://expert.csdn.net/Expert/topic/1556/1556151.xml?temp=.6606409
      

  7.   

    原结果集:车型     颜色   台数      审核日期宝马KJ   紫色    2台        2003-03-17
    宝马KJ   红色    5台        2003-03-17  
    宝马QR   青色    2台        2003-03-17 
    宝马PK   红色    10台       2003-03-17 
    显示结果集:                   宝马KJ               宝马KR    ....(注:这一行的值是根据车型)
                
    审核日期      紫色       红色         青色  红色2003-03-17    2台         3台         5台    0台
    ...
      

  8.   

    declare @sql varchar(8000)
    set @sql = 'select 审核日期,'
    select @sql = @sql + 'sum(case when 车型='''+车型+''' and  颜色='''+颜色+'''
                              then 台数 else 0 end) as '''+车型+'/'+颜色+''','
      from (select 车型,颜色 from 原结果集 group by 车型,颜色) as aselect @sql = left(@sql,len(@sql)-1) + ' from 原结果集 group by 审核日期'exec(@sql)
    go
      

  9.   

    pengdali(大力) glboy(星毅)能不能说下在水晶报表里该怎样做?我对水晶报表不熟.
      

  10.   

    你参照大力的将之写成了一个存储过程了,是吗?
    你是使用VS.NET自带的水晶报表还是使用水晶报表工具来完成的?
      

  11.   

    不然你可以参考下我以前回的一篇帖子:http://expert.csdn.net/Expert/topic/1519/1519856.xml?temp=.7923853记住:只要有返回结果集,都是类似的处理的,存储过程跟数据表没什么不同。
      

  12.   

    gz!!!!!
    xsd文件中,怎么构架数据关系。
      

  13.   

    你试过做报表没?
    你参考我的那篇帖子应该是可以完成的了报表的装载和查看
    一.使用CrystalReportViewer跟水晶报表Crystal Report的绑定浏览;
    1.Solution Explorer/Add/Add New Item…/DataSet,按照提示建立DataSet的XML架构文件(.xsd);
    2.Solution Explorer/Add/Add New Item…/Crystal Report,建立报表文件;在这里完成跟存储过程数据源的连接和报表布局;
    3。然后再建立一个窗体文件 CrystalReport.aspx
       并在文件中建立或从工具箱中拖入一个CrystalReportViewer
    4.在CrystalReport.aspx.cs中写入下列代码:(添加在Page_Load事件中)
    // 设置连接信息
    string myConnectionString = "data source=RAINFISH;initial catalog=car;persist security info=False;user id=sa;workstation id=RAINFISH;packet size=4096";
    SqlConnection myConnection = new SqlConnection(myConnectionString);
    string mySelectQuery = "select * from TbAutoDispatchBill";
    SqlDataAdapter myDataAdapter = new SqlDataAdapter(mySelectQuery, myConnection);
    //DataSet1为用XML 架构定义语言 (XSD) 描述的DataSet架构
    DataSet1 dsBill = new DataSet1();
    // 连接到数据库、从数据库中获取数据然后断开数据库连接
    myDataAdapter.Fill(dsBill,"TbAutoDispatchBill");//
    在这里TbAutoDispatchBill要写为你存储过程的实际名;
    //实例化水晶报表
    CrystalReport_Bill CR_Bill = new CrystalReport_Bill();
    //将填充的数据集传递给报表
    CR_Bill.SetDataSource(dsBill);
    //设置报表源,将该报表对象绑定到 Web 窗体查看器
    CrystalReportViewer1.ReportSource=CR_Bill;

      

  14.   


    感谢星毅!我在建立.rpt文件时,横向标题中的车型字段怎么处理!只先创建一列还是多列?
      

  15.   

    按照大力思路我刚才试了下,得出的结果是:
    按照你上面给出的源数据来测试的审核日期      宝马KJ/红色 宝马KJ/紫色   宝马QR/红色 宝马PK/青色
    2003-03-17 5   2         10          2就是说这样的结果现在也还可以,是吗?
      

  16.   

    对存储过程的返回结果集的报表输出,我试验了,是可以了的,但是从数据库删除掉一些记录,那么XSD的描述文件跟访问到的数据库不对应,这样就产生错误了,这个问题主要要解决动态生成XML架构文件而且报表跟数据源的连接也要采用动态实现,这样就可以实现你的效果还有你要增加这么个东西在你的页面中,否则会出现登陆错误:
    //设置按名称指定的表的 TableLogOnInfo 对象。 
    TableLogOnInfo logOnInfo = new TableLogOnInfo(); //对报表中的每个表进行循环
    //报表中数据集的Table 对象的个数
    for(int i=0;i==Report.Database.Tables.Count-1;i++)
    {
    // 为报表中的表设置连接信息。
         
    // 设置服务器或 ODBC 数据源名称、数据库名称、
     logOnInfo.ConnectionInfo.ServerName = "Rainfish";
     logOnInfo.ConnectionInfo.DatabaseName = "Test"; //设置用于登录到数据源的用户名
    logOnInfo.ConnectionInfo.UserID = "sa";
    //设置用于登录到数据源的“密码”
    logOnInfo.ConnectionInfo.Password = "";
    // 将连接信息应用于表。
    CR_Report.Database.Tables[i].ApplyLogOnInfo(logOnInfo);
    }示例代码如下:
    private void Page_Load(object sender, System.EventArgs e)
    {
    // 在此处放置用户代码以初始化页面
    string myConnectionString = "ConnectionString";
    SqlConnection myConnection = new SqlConnection(myConnectionString);
    string mySelectQuery = "exec Up_ReportTest ";
    SqlDataAdapter myDataAdapter = new SqlDataAdapter(mySelectQuery, myConnection);
    //DataSet1为用XML 架构定义语言 (XSD) 描述的DataSet架构
    DataSet1 dsBill = new DataSet1();
    // 连接到数据库、从数据库中获取数据然后断开数据库连接
    myDataAdapter.Fill(dsBill,"Up_ReportTest");
    //实例化水晶报表
    CrystalReport1 CR_Bill = new CrystalReport1(); //设置按名称指定的表的 TableLogOnInfo 对象。 
    TableLogOnInfo logOnInfo = new TableLogOnInfo(); //对报表中的每个表进行循环
    //报表中数据集的Table 对象的个数
    for(int i=0;i==CR_Bill.Database.Tables.Count-1;i++)
    {
    // 为报表中的表设置连接信息。
         
    // 设置服务器或 ODBC 数据源名称、数据库名称、
     logOnInfo.ConnectionInfo.ServerName = "Rainfish";
     logOnInfo.ConnectionInfo.DatabaseName = "Test"; //设置用于登录到数据源的用户名
    logOnInfo.ConnectionInfo.UserID = "sa";
    //设置用于登录到数据源的“密码”
    logOnInfo.ConnectionInfo.Password = "";
    // 将连接信息应用于表。
    CR_Bill.Database.Tables[i].ApplyLogOnInfo(logOnInfo);
    } //将填充的数据集传递给报表
    CR_Bill.SetDataSource(dsBill);
    //设置报表源,将该报表对象绑定到 Web 窗体查看器
    CrystalReportViewer1.ReportSource=CR_Bill; }你要解决的那个问题还要好好想想才能解决
      

  17.   

    虽然,问题没有完全解决,但是,在这我得感谢 glboy(星毅),pengdali(大力) 等的热心帮助!glboy(星毅),pengdali(大力)能加我的QQ(5422838)吗?今后,好向你们请教啊!
    哈!