Ticket1.Load(MainFrm.ExePath + "Ticket.rpt");
            DataTable dt = new DataTable();
            dt.TableName = "Print";
            dt.Columns.Add("id");
            dt.Columns.Add("IP");
            DataRow dr = dt.NewRow();
            dr[0] = 1;
            dr[1] = "1";
            dt.Rows.Add(dr);
            Ticket1.SetDataSource(dt);
            initTicket();
            crystalReportViewer1.ReportSource = Ticket1;
            crystalReportViewer1.PrintReport();显示出来的界面为空,不知道为什么
在线等待

解决方案 »

  1.   

    1、打开Ticket.rpt设计界面,在字段资源管理器的数据库字段 设置数据源了吗?
    2、设置的数据结构和你这边的dt结构是否一致?
    3、你这里的dt列没设数据类型
    4、如果只是为了查看报表,最后一句代码不需要
      

  2.   

    1、建立数据集DataSet
    2、建立表DataTable 
    3、建立RPT文件,选择RPT文件关联的DataTable
    4、操作数据库,添加数据到DS中去
    5、设置报表的数据源 也就是你的  crystalReportViewer1.ReportSource = Ticket1;具体的可以参考:
    阿泰软件主义 水晶报表的专家 进他博客 很多文章和实例的我收藏的一个视频教程:
    http://v.youku.com/v_show/id_co00XMTU1OTU3ODQ=.html
      

  3.   

    建议你在新建的数据集里设置列和表名称。
    例如:
    MyReportData Mydata = new MyReportData();private void frmPrint_Load(object sender, EventArgs e)
            {
                //显示报表内容
                int MemberId = 1;
                da = new MySqlDataAdapter("select a.MemberId as MemberId,MemberName,Score,Type from member as a left join memscore as b on a.memberid = b.memberid where a.memberid =" + MemberId + "", conn);
                 //这里表名称与数据集设置保持一致
                da.Fill(Mydata, "MyReportDataTable");
                crystalReport11.Load(Application.StartupPath + "CrystalReport1.rpt");
                crystalReport11.SetDataSource(Mydata);
                 crystalReportViewer1.ReportSource = crystalReport11;
            }
    水晶报表视频:http://www.51bcw.com/video-html-2206.htm
      

  4.   


    1、我设置了数据库字段
    2、数据类型和这边的类型相同
    3、修改代码如下
    4、想打印报表            Ticket1.Load(MainFrm.ExePath + "Ticket.rpt");
                DataTable dt = new DataTable();
                dt.TableName = "Print";
                dt.Columns.Add("id",System.Type.GetType("System.Int32"));
                dt.Columns.Add("IP",System.Type.GetType("System.String"));
                DataRow dr = dt.NewRow();
                dr[0] = 1;
                dr[1] = "1";
                dt.Rows.Add(dr);
                Ticket1.SetDataSource(dt);
                initTicket();
                crystalReportViewer1.ReportSource = Ticket1;
                crystalReportViewer1.PrintReport();
    结果一样
    困惑呀
      

  5.   

    我觉得麻烦就直接new DataTable了,在DataTable中设置了表名“Print”,列名称"id","IP"
      

  6.   

     DataRow dr = dt.NewRow();
             dr[0] = 1;//这样插入没问题吗?你调试看看那个Table有没有你插入的数据
                dr[1] = "1";

                dt.Rows.Add(dr);
    --------------------------------------------------
    PrintDocument print = new PrintDocument();
                            crystalReport11.PrintOptions.PrinterName = print.PrinterSettings.PrinterName;
                            
                            crystalReport11.PrintToPrinter(1, true, 1, 1);//打印
      

  7.   

     有呀
    通过dt.Rows[index]访问的
      

  8.   

    我的意思是看下你dt的视图,看看是不是你要的数据。
    因为我觉得dr[0] = 1;
                dr[1] = "1";
    这样不是有问题吗?dr[0]是表示第一行吧?但是你有2列呀。。
      

  9.   

    视图dt.Rows.List中有所要的数据
      

  10.   

    要是你dt视图就是你想要的效果,那我就不知道是什么原因了。。
    其他代码好像没问题。。
    你新建数据集试试,然后拖一个DataTable作为数据源,设置好列(和数据库里要显示的列名保持一致),然后再按照我上面发的那个方法。