请问一个gridview的显示样式有关问题

请教一个gridview的显示样式问题
现有一需求如

月份 成绩 总分 月份 成绩 总分 月份 成绩 总分
1月 90 95 2月 93 100 3月 96 98
4月 90 95 5月 93 100 6月 96 98
7月 90 95 8月 93 100 9月 96 98
10月 90 95 11月 93 100 12月 96 98


请问 gridview能实现这种效果吗 

其中成绩和总分是数据库读取的 

如果gridview不能实现 用什么控件可以呢??
尝试了写12个成绩label和12个总分label的本方法 读取数据依次赋值
但是遇到数据不足12条 就无法按照月份赋值相应label了 
我用的dataset 不足12条就是 0处没有任何行

------解决方案--------------------
C# code
    protected void Page_Load(object sender, EventArgs e)
    {
        ConvertTable();
    }

    protected void ConvertTable()
    {
        DataTable dtA = new DataTable();
        dtA.Columns.Add("id", typeof(string));
        dtA.Columns.Add("name", typeof(string));
        dtA.Columns.Add("chengji", typeof(string));
        dtA.Columns.Add("zongfen", typeof(string));
        dtA.Columns.Add("time", typeof(string));

        //添加数据
        dtA.Rows.Add("1", "张三", "90", "92", "2012-01-27");
        dtA.Rows.Add("2", "张三", "95", "99", "2012-02-27");
        dtA.Rows.Add("3", "张三", "96", "98", "2012-03-27");
        dtA.Rows.Add("4", "张三", "85", "96", "2012-04-27");
        dtA.Rows.Add("5", "张三", "85", "96", "2012-05-27");
        dtA.Rows.Add("6", "张三", "85", "96", "2012-06-27");
        dtA.Rows.Add("7", "张三", "85", "96", "2012-07-27");

        //把dtA转换为dtB
        DataTable dtB = new DataTable();
        dtB.Columns.Add("月份A", typeof(string));
        dtB.Columns.Add("成绩A", typeof(string));
        dtB.Columns.Add("总分A", typeof(string));
        dtB.Columns.Add("月份B", typeof(string));
        dtB.Columns.Add("成绩B", typeof(string));
        dtB.Columns.Add("总分B", typeof(string));
        dtB.Columns.Add("月份C", typeof(string));
        dtB.Columns.Add("成绩C", typeof(string));
        dtB.Columns.Add("总分C", typeof(string));


        DataRow dr = dtB.NewRow();


        int flag = 0;

        for (int i = 0; i < dtA.Rows.Count; i++)
        {
            if (i % 3 == 0 && i != 0)
            {
                flag = 0;
                dtB.Rows.Add(dr);
                dr = dtB.NewRow();
                dr[flag * 3] = DateTime.Parse(dtA.Rows[i]["time"].ToString()).Month.ToString() + "月";
                dr[flag * 3 + 1] = dtA.Rows[i]["chengji"].ToString();
                dr[flag * 3 + 2] = dtA.Rows[i]["zongfen"].ToString();
            }
            else
            {
                dr[flag * 3] = DateTime.Parse(dtA.Rows[i]["time"].ToString()).Month.ToString() + "月";
                dr[flag * 3 + 1] = dtA.Rows[i]["chengji"].ToString();
                dr[flag * 3 + 2] = dtA.Rows[i]["zongfen"].ToString();
                flag++;
            }

            if (i == dtA.Rows.Count - 1)
            {
                while (flag < 2)
                {
                    flag++;
                    dr[flag * 3] = "";
                    dr[flag * 3 + 1] = "";
                    dr[flag * 3 + 2] = "";

                }
                dtB.Rows.Add(dr);
            }
        }

        //输入头
        foreach (DataColumn c in dtB.Columns)
        {
            Response.Write(c.ColumnName);
            Response.Write("    ");
        }
        Response.Write("<br/>");

        //输出测试结果
        foreach (DataRow item in dtB.Rows)
        {
            foreach (object c in item.ItemArray)
            {
                Response.Write(c.ToString());
                Response.Write("    ");
            }
            Response.Write("<br/>");
        }

    }