DataTable排序结果的纠正

默认情况下,即便db中某一列的值是数字,查询出来的DataSet/DataTable里,Column的类型都是String型,所以当用dataTable.DefaultView.Sort ="XXX ASC"排序时,都是按字符串排序处理的,并不是我们想要的结果,下面给出了二种解决办法:

using System;
using System.Data;

namespace DataTableSortSample
{
    class Program
    {
        static void Main(string[] args)
        {
            DataTable dt = new DataTable();
            dt.Columns.Add("Month");
            dt.Rows.Add("1");
            dt.Rows.Add("11");
            dt.Rows.Add("2");
            dt.Rows.Add("12");
            dt.DefaultView.Sort = "Month ASC";
            dt = dt.DefaultView.ToTable();

            foreach (DataRow s in dt.Rows)
            {
                Console.WriteLine(s["Month"]);
            }
            Console.WriteLine("----------------------------------");

            #region 方法1:将月份补齐为2位 (前提:补齐这种方案并非所有需求都能接受,这个要看该列的业务含义)
            for (int i = 0; i < dt.Rows.Count; i++)
            {
                dt.Rows[i]["Month"] = dt.Rows[i]["Month"].ToString().PadLeft(2, '0');
            }
            dt.DefaultView.Sort = "Month ASC";

            dt = dt.DefaultView.ToTable();

            foreach (DataRow s in dt.Rows)
            {
                Console.WriteLine(s["Month"]);
            }
            #endregion

            Console.WriteLine("----------------------------------");

            #region 方法2:建一个新DataTable,将Month列类型,修改成int型,然后导入数据
            DataTable dtNew = dt.Clone();
            dtNew.Columns["Month"].DataType = typeof (int);//重新指定列类型为int型
            foreach (DataRow s in dt.Rows)
            {
                dtNew.ImportRow(s);//导入旧数据
            }

            dtNew.DefaultView.Sort = "Month ASC";
            dtNew = dtNew.DefaultView.ToTable();

            foreach (DataRow s in dtNew.Rows)
            {
                Console.WriteLine(s["Month"]);
            }
            #endregion
            Console.Read();

        }
    }
}

  运行结果:

1
11
12
2
----------------------------------
01
02
11
12
----------------------------------
1
2
11
12

 

时间: 2024-11-11 18:09:32

DataTable排序结果的纠正的相关文章

DataTable 排序 问题 C#

问题描述 现有一表栏位如下:ABCDabcd怎么把它转化为以下顺序:AaBbCcDd 解决方案 解决方案二:没有现成的方法,只有自己逐个处理.解决方案三:复制datatable,先复制表结构,复制数据的时候调整.解决方案四:引用楼主guizilaile的回复: 现有一表栏位如下:ABCDabcd怎么把它转化为以下顺序:AaBbCcDd dt.DefaultView.Sort就可以搞定,界面上一个DataGridview控件,你试试DataTabledt=newDataTable();dt.Col

GridView,DataTable和List排序,SQL分页 支持CheckBox选择

重新封装了一个 gridview,支持如下功能: 1. checkbox选择记录,指定checkbox的位置 2. 支持list,dataset,datatable 排序 3. 排序时在header部分出现图标 4. 封装了pageindexchanged 和databind,不用每页都写. 5. 支持sql分页和aps教程netpager等分页控件. 注: 没有加入很多的功能,因为本身需要的就是一个轻量级的gridview,产生近可能少的代码. 另:选择高亮功能是用jquery实现的,因此使用

java datatable中怎么做排序编号!

问题描述 java datatable中怎么做排序编号! 我现在需要在excel行号前面加一列编号,并且按顺序来排列!例如1.2.3.4..... 解决方案 你用的是什么数据库?现在几个主流的数据库都有ROWNUM 或者参考How to display dataTable row numbers in JSF这篇文章和源码是否对你有帮助.

datagridview-C# 对NEW Datatable过滤排序,为何会影响到DataGridView的显示,BUG吗?

问题描述 C# 对NEW Datatable过滤排序,为何会影响到DataGridView的显示,BUG吗? C# 对NEW Datatable过滤排序,为何会影响到DataGridView的显示,BUG吗? 见代码 paras = new SqlParameter[]{ new SqlParameter("@type", "待复核明细"), new SqlParameter("@fhdjbh", PubVar.djbh) }; dt = Pub

dataTable如何按分组统计的多少进行排序(不好描述,内有例子)

问题描述 dataTable内的数据是这样的,我想按下面这样排序:排序的依据是:dw字段中y的统计数为5,z的统计为3,x的统计为2有什么办法能做到吗?程序是.NET2.0的,所以不能用linqjavascript:void(0); 解决方案 解决方案二:1.遍历,统计出datatable里面dw列每个元素的数量,得到一个中间表dt1ItemCountx2y5z3 2.根据dt1的Count回过头来查询datatable,构造你上面的结果集解决方案三:谢楼上,第一步容易,第二步怎么搞呢?解决方案

[转]asp.net中对DataTable数据进行排序、检索、合并、分页、统计

asp.net中对DataTable数据进行排序.检索.合并.分页.统计    一.排序 1 获取DataTable的默认视图 2 对视图设置排序表达式 3 用排序后的视图导出的新DataTable替换就DataTable (Asc升序可省略,多列排序用","隔开) DataView dv = dt.DefaultView; dv.Sort = "id Asc,name Desc"; dt = dv.ToTable(); 二.检索 1 设置查询字符串 2 使用Sel

GridView实战一:自定义分页、排序、修改、插入、删除

前言: 在某次公司面试时被问到对GridView操作的熟悉程度,在那之前一直用Repeater内嵌table标签对GridView操作确实很 少,于是最近在项目的后台上对GridView进行了一番实操,本文和后面的另一篇GridView实战二:使用ObjectDataSource数据源 控件均是这段时间的一些总结. GridView优点就是集数据绑定.分页.排序.删.改于一身,提高了开发效率:缺点嘛,就是运行效率低,并且它本身不带添加功能.于是GridView用于后台开发是一个不错的选择,而前台

sqlserver 存储过程分页(按多条件排序)

cs页面调用代码: 复制代码 代码如下: public int TotalPage = 0; public int PageCurrent = 1; public int PageSize = 25; public int RowsCount = 0; string userid, username; public DataTable dt = new DataTable(); public string path, userwelcome; public string opt,cid; pro

php文件管理,可以点击按照时间,大小,名称排序

php文件管理,可以点击按照时间,大小,名称排序本例没有用到jquery 演示PHP Code <?php $rootdir="./"; $spacenum=0; $filenum=0; $allfilesize=0; echo " 文件管理freejs.net测试 "; echo "重置"; readLogDir($rootdir); echo " "; echo "Total files count: $f