DataTable一些操作


   DataTable ReturnDt = new DataTable("Tab_Result");
            ReturnDt.Columns.AddRange(new DataColumn[] 
                {   
                    new DataColumn("序號", typeof(int)),
                    new DataColumn("分公司名稱", typeof(string)),
                    new DataColumn("銷售件數", typeof(int)),
                    new DataColumn("銷售均價", typeof(decimal)),
                    new DataColumn("銷售總額", typeof(decimal)),
                    new DataColumn("售前件數", typeof(int)),
                    new DataColumn("售后件數", typeof(int)),
                    new DataColumn("簽約店數", typeof(int)),    
                    new DataColumn("有效店數", typeof(int)),
                    new DataColumn("銷售總件數", typeof(int)),
                    new DataColumn("總店數", typeof(int)),

                });
            int Count = 20;
            for (int i = 1; i <= Count; i++)
            {
                System.Data.DataRow myRow = ReturnDt.NewRow();
                myRow["序號"] = i;
                myRow["分公司名稱"] = "北京" + i;
                myRow["銷售件數"] = 1 + i;
                myRow["銷售均價"] = Convert.ToDecimal(i.ToString()).ToString("0.00");
                myRow["銷售總額"] = Convert.ToDecimal(i.ToString()).ToString("0.00");
                myRow["售前件數"] = i + 2;
                myRow["售后件數"] = i + 3;
                myRow["簽約店數"] = i + 4;
                myRow["有效店數"] = i + 5;
                myRow["銷售總件數"] = int.Parse(myRow["售前件數"].ToString()) + int.Parse(myRow["售后件數"].ToString());
                ReturnDt.Rows.Add(myRow);
                //需放在后面,不然賦值錯誤,可做為匯總列,沒初始值
                myRow["總店數"] = ReturnDt.Compute("Sum(簽約店數)+Sum(有效店數)", "序號=" + i.ToString());

                if (i == Count)
                {
                    //添加匯總行
                    System.Data.DataRow myRow1 = ReturnDt.NewRow();
                    myRow1["序號"] = 0;
                    myRow1["分公司名稱"] = "匯總行";
                    myRow1["銷售件數"] = ReturnDt.Compute("SUM(銷售件數)", "");
                    myRow1["銷售均價"] = ReturnDt.Compute("SUM(銷售均價)", "");
                    myRow1["銷售總額"] = ReturnDt.Compute("SUM(銷售總額)", "");
                    myRow1["售前件數"] = ReturnDt.Compute("SUM(售前件數)", "");
                    myRow1["售后件數"] = ReturnDt.Compute("SUM(售后件數)", "");
                    myRow1["簽約店數"] = ReturnDt.Compute("SUM(簽約店數)", "");
                    myRow1["有效店數"] = ReturnDt.Compute("SUM(有效店數)", "");
                    myRow1["銷售總件數"] = ReturnDt.Compute("SUM(銷售總件數)", "");
                    myRow1["總店數"] = ReturnDt.Compute("SUM(總店數)", "");
                    //ReturnDt.Rows.Add(myRow1);//插入到最后一行
                    ReturnDt.Rows.InsertAt(myRow1, 0);//插入到第一行

                }

            }

            //刪除列  
            // ReturnDt.Columns.Remove("銷售總件數");


            //調整列順序 ,列排序從0開始  
            ReturnDt.Columns["分公司名稱"].SetOrdinal(0);



            //修改列標題名稱  
            ReturnDt.Columns["分公司名稱"].ColumnName = "名稱";


            // ReturnDt.Rows.Remove(row);//根據row行信息刪除  
            //ReturnDt.Rows.RemoveAt(1);//根據index索引刪除  


            //查詢序號大於等於5,並且按銷售件數排序
            EnumerableRowCollection<DataRow> query =
                from order in ReturnDt.AsEnumerable()
                where order.Field<int>("序號") <= 15
                orderby order.Field<int>("銷售總件數")
                select order;


            //復制表
            DataTable boundTable = query.CopyToDataTable<DataRow>();

            DataView view1 = query.AsDataView();
            //view1.Sort = "序號 DESC";//降序
            view1.Sort = "序號 ASC";//升序
            view1.RowFilter = "序號 < 15";//篩選


            //泛型轉DataTable
            List<People> list = new List<People>()
            {
              new People{ID=1,Name="A",Sex="",Age=18,Tel="0871-8989898",Addres="四川南通市區1",Work="工程師",Income=8000.09,Birthday=System.DateTime.Now},
              new People{ID=2,Name="B",Sex="",Age=18,Tel="0871-8989898",Addres="四川南通市區2",Work="教師",Income=8010.09,Birthday=System.DateTime.Now},
              new People{ID=3,Name="S",Sex="",Age=18,Tel="0871-8989898",Addres="四川南通市區3",Work="博士",Income=8200.09,Birthday=System.DateTime.Now},
              new People{ID=4,Name="AD",Sex="",Age=18,Tel="0871-8989898",Addres="四川南通市區4",Work="工程師",Income=840.09,Birthday=System.DateTime.Now},
              new People{ID=5,Name="AA",Sex="",Age=18,Tel="0871-8989898",Addres="四川南通市區5",Work="工程師",Income=8500.09,Birthday=System.DateTime.Now},
              new People{ID=6,Name="AR",Sex="",Age=18,Tel="0871-8989898",Addres="四川南通市區6",Work="建築師",Income=850.09,Birthday=System.DateTime.Now},
              new People{ID=7,Name="AW",Sex="",Age=18,Tel="0871-8989898",Addres="四川南通市區7",Work="工程師",Income=8000.09,Birthday=System.DateTime.Now},
              new People{ID=8,Name="AR",Sex="",Age=18,Tel="0871-8989898",Addres="四川南通市區8",Work="培訓師",Income=860.069,Birthday=System.DateTime.Now},
              new People{ID=9,Name="AQ",Sex="",Age=18,Tel="0871-8989898",Addres="四川南通市區9",Work="工程師",Income=8900.09,Birthday=System.DateTime.Now},
             

            };

            System.Data.DataTable dt = ConvertToDataTable(list);
            System.String str = ConvertToJson(dt);

            System.Data.DataTable dt1 = JsonToDataTable(str);
        }

        public static DataTable JsonToDataTable(string strJson)
        {
            //取出表名   
            //var rg = new Regex(@"(?<={)[^:]+(?=:\[)", RegexOptions.IgnoreCase);
            var rg = new Regex(@"([^:])+(?=:\{)", RegexOptions.IgnoreCase);
            string strName = rg.Match(strJson).Value;
            DataTable tb = null;
            //去除表名   
            //strJson = strJson.Substring(strJson.IndexOf("{") + 1);
            //strJson = strJson.Substring(0, strJson.IndexOf("}"));

            //獲取數據   
            //rg = new Regex(@"(?<={)[^}]+(?=})");
            rg = new Regex(@"(?<={)[^}]+(?=})");

            System.Text.RegularExpressions.MatchCollection mc = rg.Matches(strJson);
            for (int i = 0; i < mc.Count; i++)
            {
                string strRow = mc[i].Value;
                string[] strRows = strRow.Split(',');

                //創建表   
                if (tb == null)
                {
                    tb = new DataTable();
                    tb.TableName = strName;
                    foreach (string str in strRows)
                    {
                        var dc = new DataColumn();
                        string[] strCell = str.Split(':');
                        dc.ColumnName = strCell[0];
                        tb.Columns.Add(dc);
                    }
                    tb.AcceptChanges();
                }

                //增加內容   
                DataRow dr = tb.NewRow();
                for (int r = 0; r < strRows.Length; r++)
                {
                    //dr[r] = strRows[r].Split(':')[1].Trim().Replace(",", ",").Replace(":", ":").Replace("\"", "");
                    dr[r] = strRows[r];
                }
                tb.Rows.Add(dr);
                tb.AcceptChanges();
            }

            return tb;
        }
        //datatable轉json
        public static string ConvertToJson(DataTable dt)
        {

            StringBuilder jsonBuilder = new StringBuilder();
            int count = dt.Rows.Count;
            if (count != 0)
            {

                jsonBuilder.Append("[");
                for (int i = 0; i < dt.Rows.Count; i++)
                {
                    jsonBuilder.Append("{");
                    for (int j = 0; j < dt.Columns.Count; j++)
                    {
                        jsonBuilder.Append("");
                        jsonBuilder.Append(dt.Columns[j].ColumnName);
                        jsonBuilder.Append(":\'");
                        jsonBuilder.Append(dt.Rows[i][j].ToString());
                        jsonBuilder.Append("\',");
                    }
                    jsonBuilder.Remove(jsonBuilder.Length - 1, 1);
                    jsonBuilder.Append("},");
                }
                jsonBuilder.Remove(jsonBuilder.Length - 1, 1);
                jsonBuilder.Append("]");
                return jsonBuilder.ToString();
            }
            else
            {
                return null;
            }

        }

        //泛型轉Datatble
        public static DataTable ConvertToDataTable<T>(IList<T> list)
        {
            if (list == null || list.Count <= 0)
            {
                return null;
            }

            DataTable dataTable = new DataTable(typeof(T).Name);
            DataColumn column;
            DataRow row;

            System.Reflection.PropertyInfo[] PropertyInfo = typeof(T).GetProperties(System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance);

            foreach (T t in list)
            {
                if (t == null)
                {
                    continue;
                }

                row = dataTable.NewRow();

                for (int i = 0, j = PropertyInfo.Length; i < j; i++)
                {
                    System.Reflection.PropertyInfo pi = PropertyInfo[i];

                    string name = pi.Name;

                    if (dataTable.Columns[name] == null)
                    {
                        column = new DataColumn(name, pi.PropertyType);
                        dataTable.Columns.Add(column);
                    }

                    row[name] = pi.GetValue(t, null);
                }

                dataTable.Rows.Add(row);
            }

            return dataTable;
        }
        public class People
        {

            public string Name { get; set; }
            public int Age { get; set; }
            public string Tel { get; set; }
            public string Addres { get; set; }
            public int ID { get; set; }
            public string Sex { get; set; }
            public double Income { get; set; }
            public string Work { get; set; }
            public System.DateTime Birthday { get; set; }



        }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM