aspx中的GridView格式

时间:2015-03-23 07:27:52

标签: c# asp.net sql-server gridview

我在数据库中有一个表,我希望以不同的方式在前端显示这个。但我没有得到任何帮助来管理这个并展示不同的方式。

数据库表是:

Id  Month  Commodity  Amount
----------------------------
1   May     wheat      100
2   May     rice       200
3   June    wheat      400
4   July    maize      100

my result :

 Id  Month  Commodity  Amount
----------------------------
1   May     wheat      100
2   May     rice       200
3   June    wheat      400
4   July    maize      100

但我想用以下格式的gridview显示数据:

  Month      wheat    rice    maize
  --------------------------------
  May        100      200     
  June       400
  July                        100

我的aspx代码:

<asp:GridView ID="grdData" runat="server">
</asp:GridView>

和aspx.cs代码

protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
            getdata();
        }
    }

    public void getdata()
    {
        using (GridFormatEntities context = new GridFormatEntities())
        {
            var result = (from r in context.tbl_Commodity
                          select new
                          {
                              Id=r.Id,
                              Month = r.Month,
                              Commodity = r.Commodity,
                              Amount = r.Amount
                          }).ToList();
            grdData.DataSource = result;
            grdData.DataBind();

        }
    }

1 个答案:

答案 0 :(得分:1)

您想要的是转移您的数据或数据透视表。我不知道哪个是英文的技术核心术语。但是关于你的问题,这与格式化gridview无关,因为在将数据绑定到Gridview之前,你需要做一些数据聚合。

我已将您的基本查询结果作为演示的起点,然后应用了轴:

void Main()
{
    var list = new List<CustomObject>() 
    {
        new CustomObject() {Id = 1, Month ="May", Commodity ="Wheat", Amount = 100},
        new CustomObject() {Id = 2, Month ="May", Commodity ="Rice", Amount = 200},
        new CustomObject() {Id = 3, Month ="June", Commodity ="Wheat", Amount = 400},
        new CustomObject() {Id = 4, Month ="July", Commodity ="Maize", Amount = 100},
        new CustomObject() {Id = 5, Month ="August", Commodity ="Raspberry", Amount = 666},
    };

    var result = list.GroupBy (l => l.Month)
                     .Select (l => new {
                        Month = l.Key,
                        Wheat = l.Where(x => x.Commodity == "Wheat").Sum (x => x.Amount),
                        Rice = l.Where(x => x.Commodity == "Rice").Sum (x => x.Amount),
                        Maize = l.Where(x => x.Commodity == "Maize").Sum (x => x.Amount),
                        Raspberry = l.Where(x => x.Commodity == "Raspberry").Sum (x => x.Amount),
                     });

    result.Dump();
}

// Define other methods and classes here
class CustomObject
{
    public int Id { get; set; }
    public string Month { get; set; }
    public string Commodity { get; set; }
    public int Amount { get; set; }
}

输出:

enter image description here

如果您使用的是LinqPad,可以在此处下载整个查询脚本: http://share.linqpad.net/fqsodb.linq

<强> /编辑: 总而言之,您的查询应如下所示:

using (GridFormatEntities context = new GridFormatEntities())
{
   var result = (from r in context.tbl_Commodity
                 select new
                 {
                     Id=r.Id,
                     Month = r.Month,
                     Commodity = r.Commodity,
                     Amount = r.Amount
                 })
                 .GroupBy (r => r.Month)
                 .Select (r => new {
                    Month = r.Key,
                    Wheat = r.Where(x => x.Commodity == "Rice").Sum (x => x.Amount),
                    Rice = r.Where(x => x.Commodity == "Rice").Sum (x => x.Amount),
                    Maize = r.Where(x => x.Commodity == "Maize").Sum (x => x.Amount),
                 }).ToList();
   grdData.DataSource = result;
   grdData.DataBind();
}