gpt4 book ai didi

c# - Asp.net 数据透视表

转载 作者:太空宇宙 更新时间:2023-11-03 14:20:55 28 4
gpt4 key购买 nike

我的客户在他的电子商务数据库中有两个表

No(PK), PropertyName

No(PK), ProductNo(FK), PropertyNo(FK), Value

他只是想让我做一张那样的 table

+-----------+-------------+--------------+------------+
| | Property 1 | Property 2 | .. all properties-> |
+-----------+-------------+--------------+------------+
| Product1 | x | 4 | x |
| Product2 | 2 | x | 1 |
| Product3 | x | x | x |
| ... | | | |
| (all products) | | |
+----+-------------+---------------------+------------+

我试图通过中继器发送它,但我做不到。我怎样才能实现它?


我放弃并将解决方案作为@Bala R但是有点变化...

样本类

public class list {
public int No { get; set; }
public string PropertyName { get; set; }
}

public class list2 {
public int ProductNo { get; set; }
public int PropertyNo { get; set; }
public int Value { get; set; }

}
public class list3 {
public string ProductName { get; set; }
public int No { get; set; }

}

示例列表,

        List<list> propertyList = new List<list>();
List<list2> propertyProductList = new List<list2>();
List<list3> productList = new List<list3>();
propertyList.Add(new list { No = 1, PropertyName= "Property 1" });
propertyList.Add(new list { No = 2, PropertyName = "Property 2" });
propertyList.Add(new list { No = 3, PropertyName = "Property 3" });
propertyList.Add(new list { No = 4, PropertyName = "Property 4" });

propertyProductList.Add(new list2 { ProductNo = 1, PropertyNo = 1, Value = 3 });
propertyProductList.Add(new list2 { ProductNo = 2, PropertyNo = 3, Value = 13 });
propertyProductList.Add(new list2 { ProductNo = 2, PropertyNo = 2, Value = 8 });
propertyProductList.Add(new list2 { ProductNo = 3, PropertyNo = 2, Value = 6 });
propertyProductList.Add(new list2 { ProductNo = 4, PropertyNo = 1, Value = 2 });
propertyProductList.Add(new list2 { ProductNo = 3, PropertyNo = 1, Value = 55 });


productList.Add(new list3 { No = 1, ProductName = "Ball" });
productList.Add(new list3 { No = 2, ProductName = "Book" });
productList.Add(new list3 { No = 3, ProductName = "Pencil" });
productList.Add(new list3 { No = 4, ProductName = "TV" });

和解决方案,

        var resultSet = (from c in list2
group c by c.ProductNo into g
select new {
ProductNo = g.Key,
Value = g
}).ToList();
DataTable dt = new DataTable();
dt.Columns.Add(new DataColumn("Products"));
foreach (var item in list) {
dt.Columns.Add(new DataColumn() { ColumnName = item.PropertyName });
}
foreach (var item in resultSet) {
DataRow dr = dt.NewRow();
dr["Products"] = list3.First(p=> p.No== item.ProductNo).ProductName;
foreach (var item2 in item.Value) {
dr[list.First(l=>l.No == item2.PropertyNo).PropertyName] = item2.Value;
}
dt.Rows.Add(dr);
}
dataGrid1.DataSource = dt;
dataGrid1.DataBind();

最佳答案

你可以这样创建类

    class Product
{
public int ProductNo { get; set; }
public string ProductName { get; set; }
}

class Property
{
public int PropertyNo { get; set; }
public string PropertyName { get; set; }
}

class Value
{
public int ProductPropertyNo { get; set; }
public int ProductNo { get; set; }
public int PropertyNo { get; set; }
public string Value { get; set; }
}

和加载枚举

        IEnumerable<Product> products = GetProducts();
IEnumerable<Property> properties = GetProperties();
IEnumerable<Value> values = GetValues();

然后为 DataTable 做这样的事情

        DataTable dt = new DataTable();

dt.Columns.Add(new DataColumn("ProductName"));

foreach (var propNo in values.Select(v => v.PropertyNo).Distinct())
{
dt.Columns.Add(
new DataColumn(properties.Where(p => p.PropertyNo == propNo).First().PropertyName));


}

foreach (var prodNo in values.Select(v => v.ProductNo).Distinct())
{
Product prod = products.Where(p => p.ProductNo == prodNo).First();

DataRow dr = dt.NewRow();
dr["ProductName"] = prod.ProductName;
foreach (var value in values.Where(v => v.ProductNo == prodNo))
{
Property prop = properties.Where(p => p.PropertyNo == value.PropertyNo).First();
dr[prop.PropertyName] = value.Value;
}
}

关于c# - Asp.net 数据透视表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5426032/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com