动态创建gridview 和 Dataset

    技术2025-11-09  12

    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;

        }

     

     

    最新回复(0)