【问题标题】:merging two datasets into datagridview将两个数据集合并到 datagridview
【发布时间】:2018-01-02 03:50:31
【问题描述】:

我有两个数据集,我想将它们组合成 4 列。

dsResult - 显示月份、新卡数量和新卡总数。
dsResult2 - 显示月份和充值。

这是当前代码:

   DataSet dsResult = objWSX.SelectNewCardSummary(AYear, 
   optCurrency.SelectedValue.ToString());
   DataSet dsResult2 = objWSX.SelectTopupSummary(AYear, 
   optCurrency.SelectedValue.ToString());

   dsResult.Merge(dsResult2);


        if (dsResult != null && dsResult.Tables[0].Rows.Count > 0)
        {

            foreach (DataRow dtRow in dsResult.Tables[0].Rows)
            {
                dgvReport.Rows.Add(
                   dtRow["MonthName"].ToString(),
                   dtRow["new_card_qty"].ToString(),
                   dtRow["new_card_total"].ToString(),
                   dtRow["Top_Up_Value"].ToString()

                );
            }

Current output as displayed here:

我希望输出不会有几个月的冗余,并且它可以正确填写在 datagridview 中。

【问题讨论】:

  • 您有两个数据表。您的每个数据集只有一个表。所以按月加入这两个表。有关连接语句的示例,请参见 msdn:code.msdn.microsoft.com/101-LINQ-Samples-3fb9811b
  • 你可以使用 SQL 将两者连接起来,这样只有一个 DataTable 吗?

标签: c# .net winforms datagridview dataset


【解决方案1】:

您需要将DataTable 转换为Enumerable 集合并在Month 列上分组并从中导出新的DataTable

        if (dsResult != null && dsResult.Tables[0].Rows.Count > 0)
        {
            var distinctDataTable = dsResult.Tables[0].AsEnumerable()
                .GroupBy(row => row.Field<string>("MonthName"))
                .Select(group => new
                {
                    MonthName = group.Key,
                    new_card_qty = group.Sum(e => Convert.ToDouble(e["new_card_qty"] == DBNull.Value ? 0 : e["new_card_qty"])),
                    new_card_total = group.Sum(e => Convert.ToDouble(e["new_card_total"] == DBNull.Value ? 0 : e["new_card_total"])),
                    Top_Up_Value = group.Sum(e => Convert.ToDouble(e["Top_Up_Value"] == DBNull.Value ? 0 : e["Top_Up_Value"])),
                });

            foreach (var dtRow in distinctDataTable)
            {
                dgvReport.Rows.Add(
                   dtRow.MonthName,
                   dtRow.new_card_qty,
                   dtRow.new_card_total,
                   dtRow.Top_Up_Value,
                );
            }
        }

【讨论】:

  • 它只显示 dsResult 的结果,而不是与 dsResult2 @programtreasures 合并
  • @nurwahidah 是的,因为我们在groupby 结果中选择了First(),您需要汇总您的值。
  • 对不起,我没听懂。你能告诉我怎么做吗? @programtreasures
  • @nurwahidah 请给我一些时间
  • 当然..请慢慢来@programtreasures
猜你喜欢
  • 2017-08-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多