CrystalReport里saleOpen和product有主外键约束,productId,
数据集里也把这两个表关联了
详细资料里就拖了一个saleDate.
这是后台代码:
string sqlstrConn = "server=.;uid=sa;pwd=123456;database=jhdb";
  SqlConnection conn = new SqlConnection(sqlstrConn);
  conn.Open();
  string strsql = "select s.saleDate from saleOpen s inner join product p on p.productId=s.productId";
  SqlDataAdapter sda = new SqlDataAdapter(strsql, conn);
  DataSet2 ds = new DataSet2();
ReportDoc.Load(Server.MapPath(@"..\CrystalReport\CrystalReport.rpt"));
sda.Fill(ds, "saleOpen");
ReportDoc.SetDataSource(ds);
  CrystalReportViewer1.ReportSource = ReportDoc;
运行的时候出现错误:
sda.Fill(ds, "saleOpen");
未能启用约束。一行或多行中包含违反非空、唯一或外键约束的值。 
sql执行的时候是有数据的!!!

解决方案 »

  1.   

    另外我不知道你的数据源是怎么建立的直接和数据库连接,自动生成的数据源
    那你有可能把pull和push模式混用了
    下面两篇介绍pull和push模式的,你参考下
    http://topic.csdn.net/u/20090626/17/8090bf70-bed9-41ac-9e09-c0a6a7ab4cb8.html?51944http://topic.csdn.net/u/20090626/18/0e7d0af0-2555-479d-9cb5-84175787f2cd.html?25130
      

  2.   

    处理方式一:
      你水晶报表和DasaSet既然都是两个表,那你为什么添数据时,只填一个表呢?
      sda.Fill(ds, "saleOpen");改为sda.Fill(ds);
       
    处理方式二:
    按你原来的方式写,只能写入一个 saleOpen表并且有很多重复项
    ds.EnforceConstraints=false;
    sda.Fill(ds, "saleOpen");
    ds.EnforceConstraints=true;
      

  3.   

    sda.Fill(ds);
     如果改成这样就什么都查不出
      

  4.   

    ds.EnforceConstraints=true;
    用了这个还是会报错
    sda.Fill(ds, "saleOpen");
    未能启用约束。一行或多行中包含违反非空、唯一或外键约束的值。
      

  5.   

    ds.EnforceConstraints=false;
    sda.Fill(ds, "saleOpen");
    ds.EnforceConstraints=true;
    这样应该不用会吧,我以前都这样用的
      

  6.   

    sda.Fill(ds, "saleOpen");
    未能启用约束。一行或多行中包含违反非空、唯一或外键约束的值。  这个报错是纯数据集上的,跟水晶报表还没发生关系
    现在最快的解决方法是,把dasetset里的约束关系去掉就行了。
      

  7.   

    ds.EnforceConstraints=false;
    sda.Fill(ds, "saleOpen");
    //ds.EnforceConstraints=true;把这句干掉就是不用约束了
      

  8.   

    select s.saleDate from saleOpen s inner join product p on p.productId=s.productId你的SQL语句只查出一个saleDate
      

  9.   

    我是干掉了 结果可以了。。
    但是。。我的sql语句是
    select p.productName,s.salePrice from saleOpen s inner join product p on p.productId=s.productId
    报表上从Product表里拖了个product,从SaleOpen表拖了个salePrice结果只能显示一个
    如果sda.fill(ds,"saleOpen")那只能显示salePrice。
    如果sda.fill(ds,"productName")那只能显示productName。
    这样才能让他们都显示出来
      

  10.   

    ds.EnforceConstraints=false;
    sda.Fill(ds);
    这个不行吗?
      

  11.   

    再建一个DataSet 只搞一个表mytable,就是你想要的结果字段集(也就是包含两个表中字段(你想要的)水集报表中,把原来干掉就用这一个表就可以了
    sda.Fill(ds, "mytable");这样应该就可以了吧
      

  12.   

    你设置了两个表,却只传了一个表的数据。
    这自然是错的,实际上应该是(逻辑上是)//填充表1
    select s.* from saleOpen s inner join product p on p.productId=s.productId
    sda.fill(ds,"saleOpen");//填充表2
    select p.* from saleOpen s inner join product p on p.productId=s.productId
    sda.fill(ds,"productName");//把两个表都传给报表
    ReportDoc.SetDataSource(ds);
    CrystalReportViewer1.ReportSource = ReportDoc;
      

  13.   

    要把报表放到一个Session里,或其它保存状态的对象中
    string sqlstrConn = "server=.;uid=sa;pwd=123456;database=jhdb";
      SqlConnection conn = new SqlConnection(sqlstrConn);
      conn.Open();
      string strsql = "select s.saleDate from saleOpen s inner join product p on p.productId=s.productId";
      SqlDataAdapter sda = new SqlDataAdapter(strsql, conn);
      DataSet2 ds = new DataSet2();
    ReportDoc.Load(Server.MapPath(@"..\CrystalReport\CrystalReport.rpt"));
    sda.Fill(ds, "saleOpen");
    ReportDoc.SetDataSource(ds);
      CrystalReportViewer1.ReportSource = ReportDoc;
     Session["temp"] = ReportDoc;Page_Load(object send,EnventArgs e)
    {
      if( Session["temp"] != null)
      {
          CrystalReportViewer1.ReportSource = (ReportDocument)Session["temp"];
      }
    }
      

  14.   

    我点打印的时候 弹出个对话框 选择打印选项
    当我点击确定的时候怎么出现保存pdf格式???
      

  15.   

    刷新,也应该有数据吧 不行就自己写导出PDF的按钮就可以了,拖一个Button过去       ExportOptions   myExportOptions   =   new   ExportOptions();
                    DiskFileDestinationOptions   myDiskFileDestinationOptions   =   new   DiskFileDestinationOptions();
                    //exports文件夹要有权限并存在
                    string   myFileName   =   @ "C:\exports\ "   +   Session.SessionID.ToString()   +   ".pdf ";
                    myDiskFileDestinationOptions.DiskFileName   =   myFileName;
                    PdfRtfWordFormatOptions   myPdfRtfWordFormatOptions   =   new   PdfRtfWordFormatOptions();
                    myExportOptions.ExportDestinationType   =   ExportDestinationType.DiskFile;
                    myExportOptions.ExportFormatType   =   ExportFormatType.PortableDocFormat;
                    myDiskFileDestinationOptions.DiskFileName   =   myFileName;
                    myExportOptions.ExportDestinationOptions   =   myDiskFileDestinationOptions;
                    myExportOptions.ExportFormatOptions   =   myPdfRtfWordFormatOptions;                ReportDoc.Export(myExportOptions); 
      

  16.   

    建议还是先学点基础的吧!多学学C#里的ADO.NET,感觉这方面你的很弱
      

  17.   


    设置页面上的crystalreportviewer属性printmode=ActiveX
      

  18.   

    g
    xg
    xg
    x
    g
    xg