昨天我搞了一天无法解决,参考了一篇用dataset做打印数据源的,但是我打的时候报错,该报表不含表,如何解决CrystalReport1 orpt = new CrystalReport1();
orpt.SetDataSource(myClass.ds2.Tables[0]);<-----该报表不含表我确定里面有数据表啊,到底是哪里错了,顺便问下如何设定要打印的字段

解决方案 »

  1.   

    orpt.SetDataSource()这里需要一个类型为TABLE的参数,并且TABLE不能为空表
    估计造成你错误的原因是Tables[0]里没有值
    或者把0换成你的TABLE NAME试试
      

  2.   

    da.fill(ds2);
    orpt.SetDataSource(myClass.ds2.Tables[0]);或
    da.fill(ds2,"XXX");
    orpt.SetDataSource(myClass.ds2.Tables["XXX"]);试试
      

  3.   

    tables[0]里肯定不是空表,因为我是把它当作datagridview的数据源的,view里有结果就说明这个表不为空吧,我改了下dataGridView2.DataSource = myClass.ds2.Tables["Results"];<---成功,并且正常显示
    CrystalReport1 orpt = new CrystalReport1();
    orpt.SetDataSource(myClass.ds2.Tables["Results"]);<---仍然出错,无表求解决办法
      

  4.   

    da是指什么???dataadapter么???我这个dataset是从webservice那头传来的
      

  5.   

    不知道楼主的DataGridView2与CrystalRrport1在不在同一个页面上,如果不是的话,需要把ds2的属性由private 设置为public
      

  6.   

    不在同个页面上,CrystalRrport1不是应该是个单独的rpt文件么??我把ds2写成这样
    public static class myClass
    {
    public static dataset ds2;
    }不知这样是否对???
      

  7.   

    估计是不能设置为static的,就用
    public DataSet ds2;试试
      

  8.   

    那是不是类也要改成非静态的???
    public myclass
    {
    public dataset ds2;
    }这样???
      

  9.   

    不知道你的具体情况,应该直接写成这样就OK
    public DataSet ds2;不需要单独写一个类
      

  10.   

    非静态类要求对象引用,要怎么写哦,我myclass.后面没有出现ds2
      

  11.   

    namespace WindowsApplication1
    {
        public partial class Form1 : Form
        {
            private SqlConnection cn = new SqlConnection("...");
            private SqlDataAdapter da;
            public DataSet ds = new DataSet();
            .......
    ........这样申明的ds即可以在DataGridView里用又可以在CrystalRrport1用了.
      

  12.   

    我也跟楼主有同样的问题,不过你可以试一下
    orpt.SetDataSource(myClass.ds2)
    我把SetDataSource放成dataset时就通过了,
    不知道你能不能行?!
      

  13.   

    我写在InitializeComponent();里面了,可是~~~~~~~~~~~~~
      

  14.   

    樓主確定自己的dataset一定有表
    那就是樓主的報表有問題
    建報表時里面的表和dataset要相對應
      

  15.   

    我在initcompent();里面声明了public system.data.dataset ds2 = new system.data.dataset ();依然如此,我看了下代码,我并没有清楚数据或者干什么,不会取玩数据dataset里的数据就没了吧??
      

  16.   

    你的dataset的值呢!?你不会是空数据集吧!?
      

  17.   

    建報表時里面的表和dataset要相對應如何对应,请教
      

  18.   

    你换datagrid试绑定一下,看能不能显示数据
      

  19.   

    orpt.SetDataSource(myClass.ds2)
    我把SetDataSource放成dataset时就通过了,
    括号里参数换成dataset是不?
      

  20.   

    一样的错误,我把详细的代码贴出来给大家帮我分析下错在哪里[WebMethod]
        public DataSet SELECTDB(string Query)          //select查询,这个是webservice端的
        {
            try
            {
                OracleConnection CS = new OracleConnection("Data Source=wms;User Id=abs_test;Password=12345678;");
                OracleDataAdapter myCommand = new OracleDataAdapter(Query, CS);
                DataSet myDataSet = new DataSet();
                myCommand.Fill(myDataSet, "Results");
                return myDataSet;
            }
            catch (Exception ex)
            {
                return null;
            }
        } 
    private void button5_Click(object sender, EventArgs e)        //查历史明细,        
    {
                try
                {
                    movestore.localhost.Service query = new movestore.localhost.Service();
                    
                    ds2 = query.SELECTDB("select a.billno,a.bookid,b.bookname,b.price,a.factoutqty,b.price*a.factoutqty from movestoredt a,dict_bookcard b where a.bookid=b.bookid and a.billno=" + textBox3.Text);   <----这里把webservice回来的dataset给ds2;                dataGridView2.DataSource = ds2.Tables["Results"];<-----这个也成功
                }
                catch (Exception ex)
                { 
                    MessageBox.Show(ex.Message); 
                }
            }
    private void button7_Click(object sender, EventArgs e)<------打印按钮
            {
                CrystalReport1 orpt = new CrystalReport1();
                orpt.SetDataSource(ds2);   <-------失败,没有表
                //.ReportSource = oRpt;  
                Form frm3=new Form3();
                frm3.Show();
      

  21.   

    我在失败前一步写了句MessageBox.Show(ds2.Tables.Count.ToString());结果是1,说明不可能没有表
      

  22.   

    建報表時里面的表和dataset要相對應
    请问这要如何对应,我想就是这个问题,我在报表里用数据库专家找不到我定义的这个dataset
      

  23.   

    dataGridView2.DataSource = ds2.Tables["Results"];<-----这个也成功
    ????
    我在我机子上试了一下,datagrid不显示数据!!!
      

  24.   

    可是我可以显示啊,做一百次成一百次,
    我找到问题症结了,报表里没有任何表,所以出错(我随便添了个表就通过了),但问题是我想添加的是ds2这个数据集里的表,不知应该怎么搞,数据库专家里浏览不到自定义的这个ds2!!!!!!!
      

  25.   

    拉和推是报表直接连数据库查数据对吧?可是我这个报表必须用本地的这个dataset,数据库在广域网的另一边,专家里只能看到xsd的数据集,整个ds2却无法看到
      

  26.   

    goonhl(icebarg) ,告诉我你的QQ吧,这样比较方便
      

  27.   

    不是吧拉模型在拉模型中,驱动程序将连接到数据库并根据需要将数据“拉”进来。使用这种模型时,与数据库的连接和为了获取数据而执行的 SQL 命令都同时由 Crystal Reports 本身处理,不需要开发人员编写代码。如果在运行时无须编写任何特殊代码,则使用拉模型。推模型相反,推模型需要开发人员编写代码以连接到数据库,执行 SQL 命令以创建与报表中的字段匹配的记录集或数据集,并且将该对象传递给报表。该方法使您可以将连接共享置入应用程序中,并在 Crystal Reports 收到数据之前先将数据筛选出来。
      

  28.   

    goonhl(icebarg),我的QQ181408944,加我下,这样比较方便
      

  29.   

    要不取个折衷方按,取dbgridview里面显示的数据进行打印这样是否可行???
      

  30.   

    郁闷就是数据库专家找不到弱dataset的表,只有强数据类型的表,但如果我返回的是强数据类型,就不让我转换成本地强数据类型,返回的弱数据类型,数据库专家无法看到,也没法转成强类型,可有好办法??
      

  31.   

    03下面这样写通过了,没有问题,05.....怀疑bug 咳,先结帖吧
      

  32.   

    數據庫專家只是個空的,只是把表結構放進去
    至於數據你可以用sql語句導到dataset中(可以動態設置,根據不同參數導出不同數據),把它設置成報表的數據源就是了
    這是最簡單的報表啊
    沒你們想得那麼復雜