这是我第一次使用 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 提供数据,但首先要确保在调试报告之前检索数据没有问题。
希望我在这里遗漏了一些明显的东西。但愿如此...