首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

急创建动态水晶报表成功,但显示的记录重复 怎么解决?什么回事

2011-12-23 
急急急-创建动态水晶报表成功,但显示的记录重复 如何解决?什么回事?一,我建一个RPT水晶报表,里边就连了要

急急急-创建动态水晶报表成功,但显示的记录重复 如何解决?什么回事?
一,   我建一个RPT     水晶报表,   里边就连了要连的数据库表,及字段都放到了水晶报表中,也打好了表格   排好了板。

二,   我建了一个ASPX   里边建了一个动态的数据库联接(数据库与RPT一样的表)

我就想通过ASPX调用该RPT水晶报表,这样一来我可以输入些条件   动态显示数据信息。     但是运行的结果是出现记录重复,如得到的结果应该是5条记录,水晶报表会显示   5X5=25条记录         (显示的记录是对的)     请问是什么一回事?

同时建了一个   GridView1   一起帮定数据库显示,   它的显示结果是正确的(记录条数)。


代码如下
--------------------------------------  
  protected   void   Page_Load(object   sender,   EventArgs   e)
        {
                title   =   myclass.setwebtitle();
                Conn1   =   new   SqlConnection(myclass.setconn());            
                  if   (!IsPostBack)  
                {
                        bind();
                }                
        }


  protected   void   bind()
        {
                string   where   =   " ",path_rpt=myclass.rpt_file()+ "JH_SPQKB.RPT ";                
                if   (TextBox1.Text   !=   " ")
                {
                        string   y1,   m1;
                        y1   =   TextBox1.Text.Substring(0,   4);
                        m1   =   TextBox1.Text.Substring(5,   2);
                        where   =   "WHERE   (YEAR(B.SPSJ)={0})AND(MONTH(B.SPSJ)={1})AND(A.XMBH_1=B.XMBH_1)AND(B.SPR=C.YHM)AND(C.JS= '计划项目负责人 ') ";
                        where   =   string.Format(where,   y1,   m1);

                        string   sqlstr   =   "   SELECT       A.XMBH,A.XMMC,A.JSGM,A.PZTZGSR,A.SBSJ,B.SPSJ,B.SPJG,B.SPR   FROM     LXSBB   A   ,     LXSPB   B   ,YHGLB   C   ";
                        if   (where   !=   " ")
                                sqlstr   +=   where;

                        CrystalDecisions.CrystalReports.Engine.ReportDocument   cr   =   new   CrystalDecisions.CrystalReports.Engine.ReportDocument();
                        if   (!cr.IsLoaded)
                                cr.Load(path_rpt);



                        cr.SetDatabaseLogon( "sa ",   "12345678 ",   "yy-program ", "tt_jhxmgl ",true   );    
                        DataSet   dwcustDs   =   new   DataSet();
                        dwDap   =   new   SqlDataAdapter(sqlstr,   Conn1);
                        dwDap.Fill(dwcustDs, "LXSBB ");
                        dwDap.Fill(dwcustDs,   "LXSPB ");
                        dwDap.Fill(dwcustDs,   "YHGLB ");

                           
                        cr.SetDataSource(dwcustDs);
                        GridView1.DataSource   =   dwcustDs;
                        GridView1.DataBind();

                        CrystalDecisions.CrystalReports.Engine.TextObject   objTitle   =   cr.ReportDefinition.ReportObjects[ "Title "]   as   CrystalDecisions.CrystalReports.Engine.TextObject;                        
                        objTitle.Text   =   "项目审批情况表   ( "   +   TextBox1.Text   +   ") ";

                        Label1.Text   =   objTitle.Text;  
                       
                        CrystalReportViewer1.ReportSource   =   cr;

                      CrystalReportViewer1.RefreshReport();
                     

                }


    protected   void   Button1_Click(object   sender,   EventArgs   e)
        {
                bind();
        }


大家帮看一下呀。


[解决办法]
一个表肯定是没有重复了

重复出现是因为有交叉数据的出现

A表*B表*C表
数据会成倍的出现
[解决办法]
"WHERE (YEAR(B.SPSJ)={0})AND(MONTH(B.SPSJ)={1})AND(A.XMBH_1=B.XMBH_1)AND(B.SPR=C.YHM)AND(C.JS= '计划项目负责人 ') ";
[解决办法]
关联有问题吧,好好看一下表结构和SQL语句,问题应该就在这里。
[解决办法]
只要你报表要显示的字段与数据库字段有对应关系,你要填充的DATASET中的表的字段可以和报表显示字段不匹配;
你可以这样试试“
string mysql = "你要查询的SQL ";


SqlDataAdapter myDapter=new SqlDataAdapter(mysql,conn);
DataSet ds=new DataSet();
myDapter.Fill(ds);
cr.SetDataSource(ds.Tables[0]);
[解决办法]
1、把构造好的SQL语句在查询分析器里验证一下;
2、不设参数字段,直接把SQL语句生成的表作为报表的数据源试试;
[解决办法]
protected void Page_Load(object sender, EventArgs e)
{
title = myclass.setwebtitle();
Conn1 = new SqlConnection(myclass.setconn());
if (!IsPostBack)
{
bind();
}
}

改成

protected void Page_Load(object sender, EventArgs e)
{

if (!IsPostBack)
{
title = myclass.setwebtitle();
Conn1 = new SqlConnection(myclass.setconn());
bind();
}
}

试一下


[解决办法]

 把三个DataSet 合并成一个dataset 就可以解决了。但要注意的是在新dataset 中的表名(nTable)一定要跟
dwDap.Fill(dataset , "nTable") 的一致.

热点排行