我有一个数据集,我使用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%
请帮助!!
答案 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();