动态创建gridview 和 Dataset

来源:互联网 发布:mac键盘按键失灵 编辑:程序博客网 时间:2024/06/07 13:32

asp.net 中gridview还是挺好用的,尤其格式的设置对我们这种不会css的人来说很合适。但是有时候需要动态的创建column,而且datasource也需要编辑。下面举例代码

 

1. 动态添加column,column为多个日期

 

    /// <summary>

    /// 界面增加列

    /// </summary>

    /// <param name="start"></param>

    /// <param name="bWeeklyOrDaily">true为按周,false为按天</param>

    /// <param name="end"></param>

    protected void BindData(DateTime start, DateTime end, bool bWeeklyOrDaily)

    {

        if (bWeeklyOrDaily)

        {

            start = start.AddDays((int)start.DayOfWeek * (-1) + 1);

            end = end.AddDays((int)end.DayOfWeek * (-1) + 1);

        }

 

        for (DateTime t = start; t <= end; t = t.AddDays(bWeeklyOrDaily ? 7 : 1))

        {

            BoundField bfd = new BoundField();

            bfd.DataField = bfd.HeaderText = t.ToString("yyyy-MM-dd", DateTimeFormatInfo.InvariantInfo);

            this.GridViewProduct.Columns.Add(bfd);

        }

 

        this.GridViewProduct.DataSource = GetDataTable(start,end, bWeeklyOrDaily);

        this.GridViewProduct.DataBind();

    }

 

 

2. 动态创建dataset

 

 

   /// <summary>

    /// 获取数据

    /// </summary>

    /// <param name="start">开始日期</param>

    /// <param name="end">结束日期</param>

    /// <param name="bWeeklyOrDaily">true为按周,false为按天</param>

    /// <returns></returns>

    DataSet GetDataTable(DateTime start, DateTime end, bool bWeeklyOrDaily)

    {

        DataSet ds = new DataSet();

 

        DataTable dt = new DataTable("productData");

 

        DataColumn dc1 = new DataColumn("产品线", Type.GetType("System.String"));

        dt.Columns.Add(dc1);

        for (DateTime t = start; t <= end; t = t.AddDays(bWeeklyOrDaily ? 7 : 1))

        {

            DataColumn dc = new DataColumn(t.ToString("yyyy-MM-dd", DateTimeFormatInfo.InvariantInfo), Type.GetType("System.String"));

            dt.Columns.Add(dc);

        }

 

        //以上代码完成了DataTable的构架,但是里面是没有任何数据的

        List<string> pNamesWithData = DB.GetPrductLineWithData(); //GetPrductLineWithData函数访问数据库获取产品线

        foreach (string pname in pNamesWithData)

        {

            DataRow dr = dt.NewRow();

            dr["产品线"] = pname;

            Dictionary<string, string> pData = DB.GetProductLineDataSize(pname,start);//GetProductLineDataSize函数

 

            for (DateTime t = start; t <= end; t = t.AddDays(bWeeklyOrDaily?7:1))

            {

                string strDate = t.ToString("yyyy-MM-dd", DateTimeFormatInfo.InvariantInfo);

                if (pData.ContainsKey(strDate))

                {

                    long size;

                    if (long.TryParse(pData[strDate], out size))

                    {

                        if (size < 1024)

                            dr[strDate] = size + "B";

                        else if (size < 1024 * 1024)

                            dr[strDate] = string.Format("{0:.00}KB", size / 1024.0);

                        else if (size < 1024 * 1024 * 1024)

                            dr[strDate] = string.Format("{0:.00}MB", size / (1024.0 * 1024));

                        else

                            dr[strDate] = string.Format("{0:.000}GB", size / (1024.0 * 1024 * 1024));

                    }

                    else

                    {

                        dr[strDate] = pData[strDate] + "B";

                    }

                }

                else

                    dr[strDate] = "没记录";

            }

            dt.Rows.Add(dr);

        }

 

        ds.Tables.Add(dt);

        return ds;

    }

 

 

原创粉丝点击