【问题标题】:Datagridview with two datasources具有两个数据源的 Datagridview
【发布时间】:2015-05-18 13:51:16
【问题描述】:

我有两张表,一张是主表包含(id、Date、TestID、Result) 另一个是查找表(TestID,TestName)

我想在 datagridview 中显示这样的数据:

Id 、日期、测试 1、测试 2、测试 3、结果。

并且能够保存它,这可能吗?以及如何开始

【问题讨论】:

  • 从查找表测试中,而不是如果 testID ,我希望它获取名称并将其作为列
  • 如果我了解您的数据结构,那么对于每个测试,主表中应该有不同的行,因此在一行中执行所有 3 个测试没有多大意义,因为它们id 和可能的日期和结果有不同的值
  • 实际上每个测试每天都在不同的时间进行,用户希望它是一个 excel 表,所以我希望它是 Time: test Names and results under test name,这可能吗?

标签: c# winforms datagridview


【解决方案1】:

也许您可以将来自每个数据源的数据组合成一个数据集,然后将该数据集指定为数据视图的源。但是,如果没有进一步的信息,很难推测可能的解决方案。

但是..

您可以使用两个 SqlDataAdapter 将您的结果集组合到一个 DataTable 中,以分别从两个数据库中填充 DataTable。这是一个例子。

    DataTable dt = new DataTable();
    using(SqlDataAdapter a1 = new SqlDataAdapter("SELECT * FROM [user1]", "Data Source=DBServer1;Initial Catalog=Database1;User ID=user;Password=***"))
    a1.Fill(dt);

    using(SqlDataAdapter a2 = new SqlDataAdapter("SELECT * FROM [user2]", "Data Source=DBServer2;Initial Catalog=Database2;User ID=user;Password=***"))
    a2.Fill(dt);

***以上只是示例,它不是从连接到数据库开始的 100% 正确方法,但它让您开始思考它****

a1.Fill(dt) 将初始化 DataTable 并填充它。 a2.Fill(dt) 只是将行添加到另一个结果集中的 DataTable dt。此示例假定两个数据源具有相同的架构。如果没有,您必须准备数据表以容纳两个结果集。

希望这会有所帮助。

【讨论】:

    【解决方案2】:

    当然,第一个表与第二个表的记录之间的关系需要一个共享列。例如,表有 ID 列并且它在表一和表二之间共享,所以最好的方法是两个 DataTables 上的 JOIN 表或在 .NET 上通过 DataTable.Merge Method 合并。 另一种方法是,通过Enumerable.Concat Method 连接两个序列


    参考资料:

    How to: Concatenate Two Sequences (LINQ to SQL)

    DataTable.Merge Method (DataTable)

    【讨论】:

    • 是的,您可以在 Sql 中创建一个 StoredProcedure 或 View 来插入或更新该记录。您只需要一个 ID 即可对数据进行任何工作
    猜你喜欢
    • 1970-01-01
    • 2010-09-18
    • 1970-01-01
    • 2016-02-12
    • 2018-07-16
    • 1970-01-01
    • 1970-01-01
    • 2012-01-08
    • 2017-09-24
    相关资源
    最近更新 更多