如何将Crystal报表绑定到手动创建的DataSet

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何将Crystal报表绑定到手动创建的DataSet相关的知识,希望对你有一定的参考价值。

我不想从代码创建DataSet并将其设置为crystal report的数据源。 如果我不需要,我不想在VS中创建DataSet xsd文件。只是纯粹的代码。

DataSet ds = new DataSet();
DataTable tbl = new DataTable();
DataColumn cln = new DataColumn();
// I fill row, columns, table and add it to ds object
...

然后,当我需要报告时,我使用:

myReport.SetDataSource(ds);

这里的问题是我不知道如何绑定这个报告?如何添加字段? 我有一个文本和二进制数据(图像)。

答案

只有出路。正如罗萨多所说。一点点解释1. CReate一个RPT文件。 2.使用所需列创建XSD。 3.拖放rpt上的列。根据需要格式化。 4.现在创建连接,使用适配器填充该数据集。 5.填写u数据集将自动填充报告列。

以下是我的一个项目的示例代码。

Invoice invoice = new Invoice(); // instance of my rpt file
var ds = new DsBilling();  // DsBilling is mine XSD
var table2 = ds.Vendor;
var adapter2 = new VendorTableAdapter();
adapter2.Fill(table2);                   

var table = ds.Bill;
var adapter = new BillTableAdapter();
string name = cboCustReport.Text;
int month = int.Parse(cboRptFromMonth.SelectedItem.ToString());
int year = int.Parse(cboReportFromYear.SelectedItem.ToString());
adapter.Fill(table, name,month,year);

ds.AcceptChanges();

invoice.SetDataSource(ds);
crystalReportViewer1.ReportSource = invoice;
crystalReportViewer1.RefreshReport();
另一答案

试试这样......

DataSet ds = new DataSet();
   oleAdapter.Fill(ds);
   ReportDocument rpt = new ReportDocument();
   rpt.load();
   rpt.Database.Tables[0].SetDataSource(ds.Tables[0]); 
   this.crystalReportViewer1.ReportSource = rpt;
另一答案

在visual studio中添加一个数据集对象(.xsd),并用一个或多个数据表填充它,其中包含您在DataSet ds = new DataSet();上获得的SAME字段名称

然后转到.rpt文件:数据库字段 - >数据库专家 - >项目数据 - > ADO.Net DataSet,然后选择刚刚创建的数据集并根据需要设计报表。

像往常一样使用报告。

myReport.SetDataSource(ds); 
另一答案
// Use dummy image data column namely Photo, to store file system Images into data base table
GlobalVar.sql = " SELECT rollno AS reg_no, CAST(0xADB AS image) As Photo FROM mast_roll Where Rollno IN ('120512','120518')  ";
GlobalVar.da = new OleDbDataAdapter(GlobalVar.sql, GlobalVar.con);
GlobalVar.ds = new DataSet();
GlobalVar.da.Fill(GlobalVar.ds, "st_detail");

// load photo into data table
foreach (DataRow dr in GlobalVar.ds.Tables["st_detail"].Rows)
{
// complete path of photo file
    imgPath = @"D:ImageSt" + dr["reg_no"].ToString() + ".jpg";
    // read photo from file
    FsImage = Image.FromFile(imgPath);
    // convert image file to array
    byte[] PhotoArr;
    using (MemoryStream ms = new MemoryStream())
    {
        FsImage.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
        PhotoArr = ms.ToArray();
    }
    // update photo
    dr["photo"] = PhotoArr;
    // end array conversion
}
// end loading

以上是关于如何将Crystal报表绑定到手动创建的DataSet的主要内容,如果未能解决你的问题,请参考以下文章

开始在 Visual Studio 2008 中使用 Crystal Reports 2008 for winform 创建报表?

如何在 Visual Studio 2010 中使用 Crystal Reports 创建报表

如何将 Crystal 报表连接到多个数据库?

会用水晶报表crystal reports的请进

如何在Visual Studio 2010中使用Crystal Reports创建报表

如何在Visual Basic 2005中将文本框值作为参数传递给crystal报表