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();

 

dataTabel转成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"));
                            }
                        }

dataTabel转成dataview插入列后排序这才是想要的结果。

 

 

下面是另一种排序方法:

 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.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");// 这句效率底下,不建议使用,

相关文章:

  • 2021-06-19
  • 2021-10-17
  • 2021-10-19
  • 2022-12-23
  • 2022-01-24
  • 2021-06-04
  • 2022-12-23
  • 2021-07-18
猜你喜欢
  • 2022-12-23
  • 2022-01-07
  • 2022-12-23
  • 2021-10-27
  • 2021-09-20
  • 2021-08-20
  • 2021-09-21
相关资源
相似解决方案