将两个数据集合并到datagridview中

问题描述 投票:-1回答:1

我有两个数据集,我想要组合成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中正确填充。

c# .net winforms datagridview dataset
1个回答
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,
                );
            }
        }
© www.soinside.com 2019 - 2024. All rights reserved.