.net数据集网格 - 动态重新排列表列

时间:2014-09-03 05:51:52

标签: c# asp.net gridview dataset

我有一个数据集,我使用gridview在aspx页面上填充。 我希望很少的行能够动态地作为列。 例如:我希望所有基金编号都作为列(动态)和这些列的值中的工资百分比之和。此外,公共名称的年费率总结并显示为一个单独的条目。

我的实际数据

LastName  FirstName AnnualRate FundNumber  PercentSalary

AAA        AAA1      50000      201156      12

AAA        AAA1      40000      201156      6

BBB        BBB1      40000      201158      15

BBB        BBB1      40000      201160      20

我想这样做:

LastName  FirstName AnnualRate  201156     201158 201160

AAA       AAA1      90000        18%         0%     0%

BBB       BBB1      80000        0%          15%    20%

请帮助!!

1 个答案:

答案 0 :(得分:0)

按照步骤进行此操作。 假设您有数据表

DataTable ddt = getData();//dtt is your table from data set.

第1步:将表格转换为列表并过滤我们需要的一些信息

List<DataRow> data = ddt.AsEnumerable().ToList();
        var names = data.GroupBy(a => a["FirstName"]);//get names
        var fn = data.GroupBy(a => a["FundNumber"]);//get the FundNumbers

步骤2:使用必需的列创建新的DataTable。

DataTable tbl = new DataTable();
        tbl.Columns.Add("LastName", typeof(string));
        tbl.Columns.Add("FirstName", typeof(string));
        tbl.Columns.Add("AnnualRate", typeof(string));
        foreach (var item in fn)
        {
            tbl.Columns.Add(item.Key.ToString(),typeof(string));
        }

步骤3:现在将数据添加到表

foreach (var item in names)
        {
            List<DataRow> specificData = data.Where(d => d["FirstName"] == item.Key).ToList();
            DataRow newRow = tbl.NewRow();
            newRow["LastName"] = specificData[0]["LastName"];
            newRow["FirstName"] = item.Key;
            newRow["AnnualRate"] = specificData.Sum(s =>(int) s["AnnualRate"]);
            foreach (var val in fn)
            {
                newRow[val.Key.ToString()] = specificData.Where(s => s["FundNumber"] == val.Key).Sum(s => (int)s["PercentSalary"]) + "%";
            }

            tbl.Rows.Add(newRow);
        }

最后将数据绑定到您的网格。

GridView1.DataSource = tbl;
        GridView1.DataBind();