【问题标题】:how to use the foreach loop to pass each row of a wpf datagridview with Thesame data source as a report back to the report如何使用foreach循环将具有相同数据源的wpf datagridview的每一行作为报告传递回报告
【发布时间】:2021-04-02 04:18:24
【问题描述】:

如何将我的报表/报表查看器绑定到数据网格视图,其中数据源作为报表数据集的数据源? 我在报告中创建了 ID 卡设计。我在我的数据库字段(数据集)中绑定报告中的所有文本框。但是当我运行程序时,reportViewer 只显示数据库第一行的数据。

现在,我想将我的报告绑定到一个数据网格,以便我可以控制要在 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();

【问题讨论】:

  • 很难按照您的要求进行操作。目前尚不清楚代码如何与问题文本相关联。该代码似乎将网格中的“选定”行...从网格数据表(数据源)...导入/复制到新数据表。在我的测试中,代码似乎可以工作,但不清楚 “不起作用” 是什么意思。与发布的代码有关的具体情况是什么?
  • 您需要明确您的目标平台是什么... WPF 或 Winforms。 WPF 中没有DataGridView 控件。此外,代码似乎以不可能的方式混合了网格的DataSourceItemsSource。就目前而言,由于多种原因,该代码在任何一个平台上都无法运行。为了您和我们的利益,请澄清这一点。如果您使用的是 WPF,则删除 DataGridView 标记并将其切换为 DataGrid。如果您使用的是 Winforms,则删除 WPF 标记。 WPF 和 DataGridView 标记缺少您的目标受众,因为它们不属于一起。

标签: c# wpf datagridview


【解决方案1】:

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

对于 Winforms,我假设网格的 DataSourceDataView. 在这种情况下,您需要将 DataView 转换为 DataTable 以获取表的克隆模式。它可能看起来像……

DataTable dtRep = ((DataView)dgvRESULTPRINTER.DataSource).ToTable().Clone();
foreach (DataGridViewRow dgvr in dgvRESULTPRINTER.SelectedRows) {
  dtRep.ImportRow(((DataRowView)dgvr.DataBoundItem).Row);
}

对于 WPF,我还将假设网格 ItemsSourceDataView,它可能看起来像……

DataTable dtRep = ((DataView)DataGrid1.ItemsSource).ToTable().Clone();
foreach (DataRowView drv in DataGrid1.SelectedItems) {
  dtRep.ImportRow(drv.Row);
} 

根据 OP 评论编辑...

下面是使用for 循环做同样的事情。很难理解你的评论是什么意思……

”... 这样我就只将一个特定的行导入到报告中” ?

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

for (int i = 0; i < DataGrid1.SelectedItems.Count; i++) {
  dtRep.ImportRow(((DataRowView)DataGrid1.SelectedItems[i]).Row);
}

【讨论】:

  • 非常感谢;它确实有帮助,但是请我使用 FOR(...) 语句来做我对“foreach”所做的同样的事情,这样我只会将一个特定的行导入到报告中(谢谢)
  • 好的先生,非常感谢,您的所有代码都非常酷;但是如果我的代码可以得到更简化的形式,我会很高兴;您能否编写一个代码来表达“抓取您想要的选定行”的含义,以简化我的工作(谢谢)
  • 嗯……你觉得这行代码:……dtRep.ImportRow(((DataRowView)DataGrid1.SelectedItems[i]).Row);……在做什么?
  • 非常感谢上帝保佑你的想法
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-24
  • 1970-01-01
  • 1970-01-01
  • 2023-04-04
  • 2022-01-02
  • 1970-01-01
相关资源
最近更新 更多