首页 > 解决方案 > 如何在 C# 中仅将 datagridview 中的选定行导入 rdlc 报告

问题描述

我有这样的 rdlc 报告;

在此处输入图像描述

和这样的datagridview;在另一个包含我的按钮导入的 wpf 窗口上;

在此处输入图像描述

我的主要目标是仅将(任何)从 datagridview 中选择的一个行导入到 rdlc 报告中。这样选定的每一行都将显示映射行中选定的值;例如:如果选择第 1 行并单击按钮导入,则所选行列的值将根据 dataset1 到 rdlc 设计表的映射显示;

这是我的 ReportViewer_Loaded 代码;(

DataTable dt = new DataTable("DataSet1");
       string cnString = @"Data Source=SQLServer;Initial Catalog=Demo;Integrated Security=True";
       string sqlCmd = "SELECT MATH, ENGLISH, SCIENCE FROM Table1";
       using (da sqlDataAdap = new SqlDataAdapter(sqlCmd, cnString)) da.Fill(dt);
       ReportDataSource reportDataSource = new ReportDataSource() {Name = "DataSet1", Value = dt};
       reportViewer.LocalReport.ReportPath = "C:\\Users\\hp\\source\\repos\\SMSKICSO\\SMSKICSO\\myReports\\TermlyReport.rdlc";
       reportViewer.LocalReport.DataSources.Add(reportDataSource);
       reportViewer.RefreshReport();

这是我的 buttonimport_Click 事件代码;

DataTable dtRep = ((DataView)dataGrid.ItemsSource).Table.Clone();
         for (int i = 0; i < dataGrid.SelectedItems.Count; i++)
         {
             dtRep.ImportRow(((DataRowView)dataGrid.SelectedItems[i]).Row);
         }
         dtRep.AcceptChanges();
         TermlyReportShower window1 = new TermlyReportShower(dtRep);
         window1.ShowDialog();

我在 wpf 中工作,这里显示的每个代码都没有错误代码,但我遇到的问题是每次从要显示的数据网格中选择特定行,然后单击按钮导入,datagridview 中的所有三行都显示在 rdlc报告。这不是我想要的,我只想在 rdlc 报告中显示用户选择的一行,请有人帮我实现这个目标我已经尝试了很多代码,但似乎不符合我的期望,请我乞求神童来帮忙。(提前致谢)

标签: c#wpfdatagridview

解决方案


SelectedRows将帮助您获取所选行的集合。

为了安全起见,您可以通过以下方式检查您是否选择了行:

if (dataGrid.SelectedRows.Count > 0)
{
   //Some code here
}

DataTable(1)为您的报告创建一个新的:

DataTable dtRep = new DataTable();
foreach (DataGridViewColumn column in dataGrid.Columns)
    dtRep.Columns.Add(column.Name, column.CellType);

(2) 将选定的行添加到您的报告中DataTable

for (int i = 0; i < dataGrid.SelectedRows.Count; i++)
{
     dtRep.Rows.Add();
     for (int j = 0; j < dataGrid.Columns.Count; j++)
     {
         dtRep.Rows[i][j] = dataGrid.SelectedRows[i].Cells[j].Value;
     }
}

最后,将(1)和(2)代入//Some code here


推荐阅读