建议重新生成DataSet,重新绑定

解决方案 »

  1.   

    你需要重新设置登陆信息,方法很简单,在重新绑定前,先将原有的信息读出来,再重新赋给新数据源就好了,要用到的对象名称记不清楚了,好像有LOGIN字符串在里面,你查一下文档,里面还有例子。
      

  2.   

            Dim conn As New ConnectionInfo
            Dim log As TableLogOnInfo
            Dim tbl As Table
            Dim cn As New SqlClient.SqlConnection
            cn.ConnectionString = System.Configuration.ConfigurationSettings.AppSettings.Item("ConnectionString")        With conn
                .ServerName = cn.DataSource
                .DatabaseName = cn.Database
                .UserID = ConfigurationSettings.AppSettings.Item("uid")
                .Password = ConfigurationSettings.AppSettings.Item("pwd")
            End With        For Each tbl In rpt.Database.Tables
                log = tbl.LogOnInfo
                log.ConnectionInfo = conn
                tbl.ApplyLogOnInfo(log)
            Next
      

  3.   

    用dataset的一個table來填充而不是直接用dataset,應不會出現這樣的問題了!!
      

  4.   

    to cdyxh(@@+++knife+++@@)  如果用dataset的一个table来填充,那水晶报表可不能用其中的数据了。
    大家有作过用DATASET做数据源,做水晶报表吧,能否给些例子!最好是C#
      

  5.   

    应该不会有那个问题的
    首先你要确认水晶报表的数据库位置是否是你的ado。net数据集
    然后检查一下你的数据集是否可以填充
    Good luck!
      

  6.   

    我是用的单独安装的水晶报表,先要把程序生成的DataSet转成*.xsd文件,然后在水晶报表里以该文件为数据源建立.rpt文件(如果你是和vs捆绑的水晶报表,可以在建立rpt文件时直接引用那个DataSet,不用转.xsd文件了),后面的操作就按部就班了,给你点例子,都是我用过的,没有问题:
    using CrystalDecisions.Shared ;
    using CrystalDecisions.CrystalReports .Engine ;

    public class WebForm2 : System.Web.UI.Page
    {
    protected CrystalDecisions.Web.CrystalReportViewer CrystalReportViewer1;
    protected CrystalDecisions.CrystalReports.Engine.ReportDocument reportDocument1;

    private void Page_Load(object sender, System.EventArgs e)
    {
    string strProvider = "Server=(local);DataBase=pubs;UID=sa;PWD=19";
    SqlConnection MyConn = new SqlConnection(strProvider);
    MyConn.Open();
    string strSel = "Select * from employee where fname like 'P%'";
    SqlDataAdapter MyAdapter = new SqlDataAdapter(strSel,MyConn);
    DataSet1 ds = new DataSet1();//这个DataSet1在结构上最好跟水晶表的一致,
    //路径可以不同
    MyAdapter.Fill(ds,"employee)     MyConn.Close();
    reportDocument1.Load("d:\\Report2.rpt"); reportDocument1.SetDataSource(ds);
    this.CrystalReportViewer1.ReportSource = reportDocument1;
                CrystalReportViewer1.DataBind();
      

  7.   

    注意,.rpt文件的结构要和DataSet的一样,而且表名字也要一样!
      

  8.   

    Maybe this code can help u.private void btnExport_Click(object sender, System.EventArgs e)
    {
     A4500XSD xsd = new A4500XSD();
     A4500XSD.TableA4500XSDRow rw;
     xsd.TableA4500XSD.Clear(); try
     {
      System.Data.SqlClient.SqlParameter[] oParam = 
      {
      new System.Data.SqlClient.SqlParameter("@dateFm",System.Data.SqlDbType.DateTime ),
      new System.Data.SqlClient.SqlParameter("@dateTo",System.Data.SqlDbType.DateTime),
      new System.Data.SqlClient.SqlParameter("@Resend",System.Data.SqlDbType.Int)
      };
     oParam[0].Value = this.dateFm.Value;
     oParam[1].Value = this.dateTo.Value;
     oParam[2].Value = this.rdo1.Checked ? 1 : 0; System.Data.DataTable oDataTable =new System.Data.DataTable("A4500M"); bool oSuccess = MainModules.pDataRead.ExecuteSP("A4500Rpt1",oParam,oDataTable);
     if(oSuccess)
     {
      if(oDataTable.Rows.Count>0)
      {
      rw = xsd.TableA4500XSD.NewTableA4500XSDRow();
      rw.Doc_Type = row[0].ToString();
      rw.Doc_No = row[1].ToString();
      rw.Doc_Date = row[2].ToString();
      rw.Currency=row[3].ToString();
      rw.Amount = System.Convert.ToDecimal(row[4].ToString());
      rw.Ex_Rate=System.Convert.ToDecimal(row[5].ToString());
      if (row[6].ToString() =="")
       rw.Cr= row[0].ToString() == "IB" ? "" : "NO";
      else
      rw.Cr = row[6].ToString();
      if (row[7].ToString() == "")
       rw.Dr=row[0].ToString() == "IA" ? "" : "NO";
      else
       rw.Dr = row[7].ToString();
      rw.Order_No = row[8].ToString();
      rw.Art_No=row[9].ToString();

      if (rw.Cr == "NO" || rw.Dr == "NO")
      {
      xsd.TableA4500XSD.AddTableA4500XSDRow(rw);
      }
      else
      {
      rw = null;
      }  xsd.AcceptChanges();
     if (xsd.TableA4500XSD.Rows.Count >0)
     {
     string ReportFileName = Application.StartupPath + @"\..\..\" +  @"Reports\"+"A4500Rpt.rpt" ;
     MainModules.pRptDoc.Load(ReportFileName);
     MainModules.pRptDoc.SetDataSource(xsd);
     frmView fView = new frmView();
     fView.rptView.ReportSource = MainModules.pRptDoc;
     fView.rptView.Zoom(7);
     fView.ShowDialog();
     }
    }
    catch(Exception exp)
    {
    MainModules.ShowMsg("Failure Export Data to Text File ! Error is :" +exp.Message); 
    }
    }
      

  9.   

    我也遇到过这样的问题,加上这句后就不会弹出登录对话框了:
    theCrystalReport1.SetDataSource(dataSet11);但又出现了新问题:
    http://expert.csdn.net/Expert/topic/2688/2688920.xml?temp=.4953882我想是否与楼上 gshope(北京.Net) 说的"//这个DataSet1在结构上最好跟水晶表的一致,"
    有关系,但不知怎样才能使它们一致请高手继续指点!!!
      

  10.   

    填充数据集时一定要写上表名:
    MyAdapter.Fill(dataSet11,"表名");//这个DataSet1在结构上最好跟水晶表的一致
      

  11.   

    重新做,dataset和報表文件!我經常踫到的!只有重做!
      

  12.   

    http://oldlook.experts-exchange.com/Databases/Crystal_Reports/Q_20741756.html
      

  13.   

    我以前也老是为这个问题头疼,后来找到原因。不要用Dataset做数据源,使用XSD文件做数据源。
      

  14.   

    我想要,我的信箱[email protected],谢谢
      

  15.   

    参考:Asp.Net中使用水晶报表
    http://www.chinabyte.com/20020618/1616438.shtml
      

  16.   

    to:fireboyg(阿甘) 
    我想要,能不能发到
    谢谢~~~~~~
      

  17.   

    to:fireboyg(阿甘) 
    不好意思,邮箱写错了,下面为正确的
    [email protected]
    谢谢~~~~~~
      

  18.   

    這個情況我也遇到過.
    可能是table的名字錯了,訪問不到數據
      

  19.   

    (转).NET环境下水晶报表使用总结    lihonggen0
    从 ADO.NET 数据集制作报表从数据库创建数据集对象 1.      在项目中新建一个架构文件: a.      在解决方案资源管理器中,右击项目名,指向“添加”,然后单击“添加新项”。 b.      在“添加新项”对话框的“类别”区域,展开文件夹,然后选择“数据”。 c.      在“模板”区域选择“数据集”。 d.      接受默认名称 Dataset1.xsd。 这就创建了一个新的架构文件 (Dataset1.xsd),以后将用它来生成强类型数据集。该架构文件将显示在 ADO.NET 数据集设计器中。 2.      指定数据库位置: a.      在服务器资源管理器中,右击“数据连接”并选择“添加连接”。 b.      在“数据链接属性”对话框中,单击“提供程序”选项卡,然后选择一个提供程序(例如 Microsoft OLE DB Provider for SQL Server)。 c.      单击“连接”选项卡,然后指定您的数据库所在位置。在所需位置输入服务器和登录信息。 d.      单击“确定”按钮。 此时,您的数据库及其表和字段就出现在服务器资源管理器的“数据连接”节点下面。 3.      在解决方案资源管理器中,双击 Dataset1.xsd (如果它尚不是活动视图)。 Dataset1.xsd 现在应显示在“数据集”选项卡中。 4.      若要为数据集建立架构,请将需要的表从服务器资源管理器中拖动到 Dataset1.xsd 的“数据集”选项卡上。 5.      单击“保存 Dataset1.xsd”来保存“Dataset1.xsd”文件。 6.      在“生成”菜单上,单击“生成”为项目生成数据集对象。 ADO.NET 数据集对象提供数据的描述,从它可以向 Crystal report 添加表。使用 Crystal Report Designer 中的“数据库专家”从 ADO.NET 数据集对象添加表。 请在使用“报表专家”创建新报表时调用“数据库专家”。或者,要从一个已经使用 ADO.NET 建立好的报表中访问“数据库专家”,请在 Report Designer 中右击,指向“数据库”,然后单击“添加/删除数据库”。将报表连接到 ADO.NET 数据集对象 1.      在“数据库专家”中,展开“项目数据”文件夹。 2.      展开“ADO.NET 数据集”文件夹。 3.      选择所需数据集对象。 例如,如果当时使用的是从项目“WindowsApplication1”的架构文件“Dataset1.xsd”中生成的数据集对象,则应该选择“WindowsApplication1.Dataset1”。 4.      选择要向报表中添加的表,和使用其他数据源一样。 
      

  20.   

    加上RptDoc.SetDatabaseLogon("sa", "1234");就行了
      

  21.   

    好了,REPORT数据真的要和DATASET中数据结构一致,我才成功了,不过为什么不能用水晶报表上的直接打印功能,一用就报错,大家也回有这种现象吗??