如何使用Winforms从Crystal Reports中的GridView打印数据

本文关键字:中的 GridView 打印 数据 Reports Crystal 何使用 Winforms | 更新日期: 2023-09-27 18:22:05

我有一个使用行和列(无数据集或数据源)的索引号填充的DataGridView

例如:

 dataGridView1[0, 0].Value = "ABC";
 dataGridView1[0, 1].Value = "XYZ";

现在我想把它打印在Crystal Report上。我如何向Crystal Report提供dataSource,或者简单地说,我如何实现它?

除了GridView中的数据外,我还需要从文本框中打印一些其他数据。

如何使用Winforms从Crystal Reports中的GridView打印数据

我尝试过这种应用程序。

首先,我将datagridview的数据源导出为XML其次,我使用这个XML作为crystal报告的源代码。

 void TransferDataToReport()
    {
         DataTable dT = GetDataTableFromDGV(dataGridView1);
                dSet.Tables.Add(dT);
                try
                {
                    dSet.AcceptChanges();
          dSet.WriteXml(@"C:'Data.xml", XmlWriteMode.WriteSchema);
      }
      catch (FileLoadException) { }
     ReportDocument cr = new ReportDocument();
                string filePath = @"C:'CrystalReportData.rpt";
                cr.Load(filePath);
                cr.SetDataSource(dSet);
                crystalReportViewer1.ReportSource = cr;
    }
 public DataTable GetDataTableFromDGV(DataGridView dgv)
    {
        DataTable dt = new DataTable();
        foreach (DataGridViewColumn column in dgv.Columns)
        {
            dt.Columns.Add(column.Name, column.ValueType);
        }
        object[] cellValues = new object[dgv.Columns.Count];
        foreach (DataGridViewRow row in dgv.Rows)
        {
            for (int i = 0; i < row.Cells.Count; i++)
            {
                cellValues[i] = row.Cells[i].Value;
            }
            dt.Rows.Add(cellValues);
        }
        return dt;
    }