0

这是我第一次使用 DataSets 和 BindingSources,所以请对我温柔一点。

作为更复杂的报告系统的一部分(我已将其提炼为基本的化身,但它仍然无法正确运行),我正在尝试使用有问题的 DataSet 从数据库中提取数据(即,未设置通过设计师)。这是我到目前为止的代码:

// pull the data set
var dsReportData = new Reports2.ReportTest2();
dsReportData.BeginInit();
dsReportData.SchemaSerializationMode = SchemaSerializationMode.IncludeSchema;

// bind tha data set
BindingSource bsReportBinding = new BindingSource();
((ISupportInitialize)bsReportBinding).BeginInit();
bsReportBinding.DataMember = dsReportData.Tables[0].TableName;
bsReportBinding.DataSource = dsReportData;
bsReportBinding.ResetBindings(true);

// test this stuff
dgvTester.DataSource = bsReportBinding;

dsReportData.EndInit();
((ISupportInitialize)bsReportBinding).EndInit();

在通过设计器设置绑定后,我基于我在 .designer.cs 文件中看到的代码。dgvTester 只是一个具有在设计器中创建的默认属性的 DataGridView。

ReportTest2 数据集只有一个 TableAdapter,是通过设计器添加的。

现在,如果我在 VS 中转到 Data -> Preview Data 并预览ReportTest2.payments.Fill,GetData ()对象,它返回的数据就好了,就像我在 SQL Server Management Studio 中运行用于创建 TableAdapter 的查询一样。

但是,运行实际代码会导致 DataGridView 从查询结果中获取列名,而不是实际数据。调试器显示dsReportData.payments.Rows.Count == 0(是的,dsReportData.Tables[0] 是付款)。

我最终打算使用 BindingSource 向 ReportViewer 提供数据,但首先要确保在调试报告之前检索数据没有问题。

希望我在这里遗漏了一些明显的东西。但愿如此...

4

1 回答 1

1

经过一些试验和错误后想通了。这是我缺少的部分:

var TableAdapter = new Reports2.ReportTest2TableAdapters.paymentsTableAdapter();
TableAdapter.Fill(dsReportData.payments);

我在我引用的代码中没有看到它,因为设计者将它偷偷放入 .cs 文件而不是 .designer.cs 文件中。这使得数据出现。

于 2012-12-26T18:29:22.777 回答