C# 如何使用foreach循环将数据源与报表相同的wpf datagridview的每一行传递回报表

C# 如何使用foreach循环将数据源与报表相同的wpf datagridview的每一行传递回报表,c#,wpf,datagridview,C#,Wpf,Datagridview,如何将报表/报表查看器绑定到数据源与报表数据集数据源相同的datagrid视图? 我在一份报告中创建了一个身份证设计。我在数据库字段(数据集)中绑定报表中的所有文本框。但当我运行程序时,reportViewer只显示数据库第一行的数据 现在,我想将报表绑定到datagrid,这样我就可以控制要在reportViewer中显示的行 到目前为止,我已经在互联网上搜索了这是我发现的 DataTable dtRep = ((DataTable)dgv.DataSource).Clone();

如何将报表/报表查看器绑定到数据源与报表数据集数据源相同的datagrid视图? 我在一份报告中创建了一个身份证设计。我在数据库字段(数据集)中绑定报表中的所有文本框。但当我运行程序时,reportViewer只显示数据库第一行的数据

现在,我想将报表绑定到datagrid,这样我就可以控制要在reportViewer中显示的行

到目前为止,我已经在互联网上搜索了这是我发现的

DataTable dtRep = ((DataTable)dgv.DataSource).Clone();
        foreach (DataGridViewRow row in dgv.SelectedRows)
        {
            dtRep.ImportRow(((DataTable)dgv.DataSource).Rows[row.Index]);
        }
        dtRep.AcceptChanges();
但这在wpf中不起作用。有人能帮我编写一个代码来完成这个任务吗?(谢谢)

更新 非常抱歉,我在上传问题时信用不足,请原谅我的无知

这是我代码中错误的图像

DataTable dtRep = ((DataTable)dgvRESULTPRINTER.ItemsSource).Clone();
    foreach (DataGridViewRow row in dgvRESULTPRINTER.SelectedItems)
    {
        dtRep.ImportRow(((DataTable)dgvRESULTPRINTER.DataSource).Rows[row.Index]);
    }
    dtRep.AcceptChanges();

如评论所述,不清楚您的目标平台。因此,下面是一个使用WInforms平台和WPF平台的示例

对于Winforms,我假设网格的
数据源是
数据视图。
在这种情况下,您需要将
数据视图
转换为
数据表
,以获得表的克隆架构。它可能看起来像

DataTable dtRep = ((DataView)dgvRESULTPRINTER.DataSource).ToTable().Clone();
foreach (DataGridViewRow dgvr in dgvRESULTPRINTER.SelectedRows) {
  dtRep.ImportRow(((DataRowView)dgvr.DataBoundItem).Row);
}
DataTable dtRep = ((DataView)DataGrid1.ItemsSource).ToTable().Clone();
foreach (DataRowView drv in DataGrid1.SelectedItems) {
  dtRep.ImportRow(drv.Row);
} 
对于WPF,我还将假设网格
ItemsSource
是一个
DataView
,它可能看起来像

DataTable dtRep = ((DataView)dgvRESULTPRINTER.DataSource).ToTable().Clone();
foreach (DataGridViewRow dgvr in dgvRESULTPRINTER.SelectedRows) {
  dtRep.ImportRow(((DataRowView)dgvr.DataBoundItem).Row);
}
DataTable dtRep = ((DataView)DataGrid1.ItemsSource).ToTable().Clone();
foreach (DataRowView drv in DataGrid1.SelectedItems) {
  dtRep.ImportRow(drv.Row);
} 
编辑每操作评论

下面是使用
for
循环执行相同的操作。很难理解你的评论是什么意思

“…这样我将只向报表导入一个特定行”

如果您只需要一(1)个特定行,那么
for
foreach
循环用于什么?只需抓取您想要的“选定”行。我猜这比你透露的要多

for (int i = 0; i < DataGrid1.SelectedItems.Count; i++) {
  dtRep.ImportRow(((DataRowView)DataGrid1.SelectedItems[i]).Row);
}
for(int i=0;i
很难理解您的要求。目前尚不清楚该准则与问题文本的关系。代码显示为将网格中的“选定”行从网格数据表(数据源)导入/复制到新数据表。在我的测试中,代码似乎可以工作,但不清楚“不工作”是什么意思。什么与发布的代码不相关?你需要明确你的目标平台。。。WPF或Winforms。WPF中没有
DataGridView
控件。此外,代码似乎以不可能的方式混合了网格的
DataSource
ItemsSource
。目前,由于多种原因,该代码无法在两种平台中工作。为了您和我们的利益,请澄清这一点。如果您正在使用WPF,请删除
DataGridView
标记,并将其切换到
DataGrid
。如果您使用的是Winforms,请删除WPF标记。WPF和DataGridView标记缺少您的目标受众,因为它们不属于一起;这真的很有帮助,但是请允许我使用FOR(…)语句来做与我对“foreach”所做的相同的事情,这样我将只在报告中导入一行(谢谢)好的,先生,非常感谢,您的所有代码都非常棒;但如果我能为我的代码得到更简化的形式,我会很高兴;你能用一个代码来表达你所说的“抓取你想要的选定行”的意思吗?请让我的工作变得简单(谢谢)嗯…你认为这行代码是什么:…
dtRep.ImportRow(((DataRowView)DataGrid1.SelectedItems[i]).ROW)…正在做什么?非常感谢上帝保佑你的想法