zoukankan      html  css  js  c++  java
  • dataTabel转成dataview插入列后排序

     if (!string.IsNullOrEmpty(strQuyu) && !string.IsNullOrEmpty(strZuhao))
                {
                    string[] param = { 
                                 };
                    dt = proB.GetProcedureTable("pro_jetj", param, "pro_jetj");
                }
    
                dt.Columns.Add("C");
                //循环加入一列的数据
                foreach (DataRow row in dt.Rows)
                    row["C"] = row["countMoneySg"].ToString() + row["countMoneySj"].ToString() + row["countMoneyYF"].ToString() + row["countMoneyJJ"].ToString();
    
                DataView dv = dt.DefaultView;
                dv.Sort = "C";
    
                rpt_Jepm.DataSource = dt;
                rpt_Jepm.DataBind();
     dt_tj = proB.GetProcedureTable("pro_GetCgl", param, "pro_GetCgl");
    
                        //此处把成功率加进来,即加五个列
                        dt_tj.Columns.Add("A");
                        dt_tj.Columns.Add("B");
                        dt_tj.Columns.Add("C");
                        dt_tj.Columns.Add("D");
                        dt_tj.Columns.Add("E");
                        
                        DataView dv = new DataView();

     

    之前的没有指定列的类型,以至于出现排序是按第一个数字排的顺序(如图),其实可以理解,没有给他指定类型那么他默认就是object类型,现在改了,在添加列的时候并给其添加类型:

     dt_tj = proB.GetProcedureTable("pro_GetCgl", param, "pro_GetCgl");
    
                        //此处把成功率加进来,即加五个列
                        dt_tj.Columns.Add("A",typeof(double));
                        dt_tj.Columns.Add("B",typeof(double));
                        dt_tj.Columns.Add("C", typeof(double));
                        dt_tj.Columns.Add("D",typeof(double));
                        dt_tj.Columns.Add("E",typeof(double));
                        
                        DataView dv = new DataView();
                        //循环加入一列的数据
                        if (dt_tj.Rows.Count > 0)
                        {
                            foreach (DataRow row in dt_tj.Rows)
                            {
                                if (string.IsNullOrEmpty(row["bgq"].ToString().Trim()) || row["syq"].ToString().Trim() == "0")
                                {
                                    row["A"] = "0";
                                }
                                else
                                {
                                    row["A"] = Convert.ToDouble((Convert.ToDouble(row["bgc"].ToString().Trim()) / Convert.ToDouble(row["bgq"].ToString().Trim())*100).ToString("0.00"));
                                }
    
                                if (string.IsNullOrEmpty(row["cyq"].ToString().Trim()) || row["cyq"].ToString().Trim() == "0")
                                {
                                    row["B"] = "0";
                                }
                                else
                                {
                                    row["B"] = Convert.ToDouble((Convert.ToDouble(row["cyc"].ToString().Trim()) / Convert.ToDouble(row["cyq"].ToString().Trim()) * 100).ToString("0.00"));
                                }
    
                                if (string.IsNullOrEmpty(row["syq"].ToString().Trim()) || row["syq"].ToString().Trim() == "0")
                                {
                                    row["C"] = "0";
                                }
                                else
                                {
                                    row["C"] =Convert.ToDouble((Convert.ToDouble(row["syc"].ToString().Trim()) / Convert.ToDouble(row["syq"].ToString().Trim()) * 100).ToString("0.00"));
                                }
    
                                if (string.IsNullOrEmpty(row["jdq"].ToString().Trim()) || row["jdq"].ToString().Trim() == "0")
                                {
                                    row["D"] = "0";
                                }
                                else
                                {
                                    row["D"] =Convert.ToDouble(( Convert.ToDouble(row["jdc"].ToString().Trim()) / Convert.ToDouble(row["jdq"].ToString().Trim()) * 100).ToString("0.00"));
                                }
    
                                if (string.IsNullOrEmpty(row["qtq"].ToString().Trim()) || row["qtq"].ToString().Trim() == "0")
                                {
                                    row["E"] = "0";
                                }
                                else
                                {
                                    row["E"] = Convert.ToDouble((Convert.ToDouble(row["qtc"].ToString().Trim()) / Convert.ToDouble(row["qtq"].ToString().Trim()) * 100).ToString("0.00"));
                                }
                            }

    这才是想要的结果。

    下面是另一种排序方法:

     DataRow[] rows = dt_tj.Select("", "[A] DESC");
                            DataTable tblCopy = new DataTable("tablename");
                            tblCopy = dt_tj.Clone();
                            foreach (DataRow row in rows)
                            {
                                tblCopy.ImportRow(row);
                            }
                            dt_tj = tblCopy;
     注:如上生成了一个 dtTbl的Copy(tblCopy = dtTbl.Clone()),即架构完全一样的空表,同时用DataTable类的实例方法 Select()返回了由dtTbl中所有DataRow按ASC或者DESC排序的DataRow数组。
    改方法MSDN里解释得相当详细,这里不赘述。 然后用一个foreach循环把排好序的DataRow数组导入新生成的DataTable,如果后面要用到排序,只要把数据集改成这个tblCopy就 可以了。
    这里由于是新生成的DataTable,同时有重新导入了DataRow,即在内存中新开辟了一块数据区域,这样显示结果就不会变了。
        注意! 法二中不能在返回排序数组后用dtTbl.Clear()方法清空dtTbl,然后用dtTbl重新导入rows, 因为 rows数组中的各项只是对dtTbl中各DataRow的引用,是浅复制,不是深复制,即只是指向原dtTbl的rows内存区,变的只是引用的顺序,而不是原dtTbl的 rows的顺序,所以清空dtTbl,就相当于清空了数据源,import的结果就是空的tblCopy!





    附:
    dc.DataType = typeof(bool);
    dc.DataType = typeof(System.Boolean);
    dc.DataType = Type.GetType("System.Boolean");// 这句效率底下,不建议使用,
  • 相关阅读:
    python批量安装包文件requirements.txt
    python→列表、元组、字典、集合对比整理表
    Python ddt+xlrd的使用
    input类型上传多个文件(selenium+Python)
    iframe切入切出问题,经常会碰到
    selenium+python 第一步启动火狐报错解决方案,已成功
    QTP从svn上载下来无法跑,解决
    函数可变参传值(python)
    关于python 函数参数
    Air Kiss
  • 原文地址:https://www.cnblogs.com/tianrui/p/3326746.html
Copyright © 2011-2022 走看看