使用BindingSource将DataSet链接到DataGridView,但没有数据

时间:2012-12-26 18:09:56

标签: c# ado.net dataset bindingsource

这是我第一次使用DataSet和BindingSources,所以请温柔地对待我。

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

// 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中预览数据并预览ReportTest2.payments.Fill,GetData ()对象,它可以很好地返回数据,就像我运行用于在SQL Server Management Studio中创建TableAdapter的查询一样。

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

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

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

1 个答案:

答案 0 :(得分:1)

经过一些试验和错误后想出来。这是我失踪的部分:

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

我没有在我引用的代码中看到它,因为设计器将其隐藏到.cs文件而不是.designer.cs文件中。这使数据显示出来。