Как связать отчет Crystal с созданным вручную DataSet - PullRequest
10 голосов
/ 01 декабря 2011

Я не хочу создавать DataSet из кода и устанавливать его в качестве источника данных для отчета Crystal.
Я не хочу создавать файл DataSet XSD в VS, если мне не нужно. Просто чистый код.

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);

Проблема в том, что я не знаю, как связать это с отчетом? Как добавить поля?
У меня есть текстовые и двоичные данные (изображение).

Ответы [ 4 ]

15 голосов
/ 07 декабря 2011

Есть только выход.По предложению Росадо.Немного объяснил 1. Создайте файл 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();
3 голосов
/ 01 декабря 2011

попробуй вот так ...

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;
0 голосов
/ 04 октября 2015
// 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
0 голосов
/ 07 декабря 2011

Добавьте объект набора данных (.xsd) в Visual Studio и заполните его одной или несколькими таблицами данных, содержащими те же имена полей, которые вы получили на вашем DataSet ds = new DataSet();

Затем перейдите в файл .rpt: поля базы данных-> эксперт по базам данных -> данные проекта -> ADO.Net DataSets, затем выберите только что созданный набор данных и создайте отчет по своему усмотрению.

Используйте отчет как обычно.

myReport.SetDataSource(ds); 
...