例如datatable中有一列是门牌号格式是xx-xx-xx,或字符串中含有汉字或其他符号等等,如何按照正确的数字顺序排序呢?

1、获得字符串中的数字。

2、在datatable中添加一列,类型是Int或double或decimal类型的,转为排序准备。然后利用dataview.sort来排序。

1、获得字符串中的数字代码:

/// <summary>
/// 获取字符串中的数字
/// </summary>
/// <param name="str">字符串</param>
/// <returns>数字</returns>
public static decimal GetNumber(string str)
{
decimal result = ;
if (!string.IsNullOrEmpty(str))
{
// 正则表达式剔除非数字字符(不包含小数点.)
str = Regex.Replace(str, @"[^\d.\d]", "");
// 如果是数字,则转换为decimal类型
if (Regex.IsMatch(str, @"^[+-]?\d*[.]?\d*$"))
{
result = decimal.Parse(str);
}
}
return result;
}

2、排序

DataTable dt = new DataTable();
DataColumn dc = dt.Columns.Add("OBJECTID", Type.GetType("System.String"));
dc = dt.Columns.Add("YDDW", Type.GetType("System.String"));
dc = dt.Columns.Add("XMMC", Type.GetType("System.String"));
dc = dt.Columns.Add("XH", typeof(decimal));//添加XH一列,类型为decimal用于排序
while (feature != null)
{
int field1 = feature.Fields.FindField("YDDW");
int field2 = feature.Fields.FindField("XMMC");
int field3 = feature.Fields.FindField("XH");
string strOID = feature.OID.ToString();
string strYDDW = feature.get_Value(field1).ToString();
string strXMMC = feature.get_Value(field2).ToString();
string strXH = feature.get_Value(field3).ToString();//原字符串 decimal xh = Common.GetNumber(strXH);//从原字符串中提取数字
DataRow dr = dt.NewRow();
dr["OBJECTID"] = strOID;
dr["YDDW"] = strYDDW;
dr["XMMC"] = strXMMC;
dr["XH"] = xh;//赋值
dt.Rows.Add(dr);
feature = featureCursor.NextFeature();
}
dgvList.AutoGenerateColumns = false;//禁止自动添加列
DataView dv = dt.DefaultView;//转化DataView
dv.Sort = "XH Asc";//排序
dgvList.DataSource = dt;//绑定数据

C# DataTable中按字符串中的数字排序的更多相关文章

  1. 字符串--java中判断字符串是否为数字的方法的几种方法?

    ava中判断字符串是否为数字的方法: 1.用JAVA自带的函数 public static boolean isNumeric(String str){ for (int i = 0; i < ...

  2. 在SQL中取出字符串中数字部分或在SQL中取出字符部分

    在SQL中取出字符串中数字部分或在SQL中取出字符部分 编写人:CC阿爸 2013-10-18 近来在开发一个项目时,一包含数字的字符串,需要取出中间的数字部分进行排序.经过baidu搜索.并结合自己 ...

  3. java中判断字符串是否为数字的方法的几种方法

    1.用JAVA自带的函数 public static boolean isNumeric(String str){ for (int i = 0; i < str.length(); i++){ ...

  4. (转载)java中判断字符串是否为数字的方法的几种方法

    java中判断字符串是否为数字的方法: 1.用JAVA自带的函数 public static boolean isNumeric(String str){ for (int i = 0; i < ...

  5. PHP中去除字符串中的换行的方法

    在PHP中,有时候我们需要对字符串的换行进行过滤,比如天涯PHP博客中文章页面的description信息,我是直接截取的文章内容,并过滤掉html符号,最终还要过滤掉其中的换行.下面整理一下常见的去 ...

  6. PHP中取出字符串中的空格 逗号

    preg_replace("/\s| |,|,/","",$_str) PHP中取出字符串中的空格 逗号 (包括中文状态下)

  7. C#中查询字符串中是否包含指定字符/串,使用IndexOf还是Contains?

    C#中查询字符串中是否包含指定字符/串,使用IndexOf还是Contains?这是一个很常见的命题,以前也没有注意,今天QQ群里有人提起,于是就做了下试验,代码如下: using System; u ...

  8. Python中去除字符串中的单个或多个空格的方法总结

    python中去除字符串中空格的方法比较多,单个看起来也都比较简单 但是使用起来容易发生混淆 为了加深记忆 将常用的去除字符串中空格的方法汇总如下 方法一:strip()方法 >>> ...

  9. mysql将字符串字段转为数字排序或比大小

    SELECT * FROM Student WHERE 1 = 1 ORDER BY -ID DESC ; SELECT * FROM Student WHERE 1 = 1 ORDER BY (ID ...

随机推荐

  1. bind方法使用案例

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  2. shell简单监控脚本模板

    #!/bin/bash host=127.0.0.1user=adminpassword='xx'port=6032x=0check_proxy(){v=$(mysql -N -u$user -p$p ...

  3. pthread_join/pthread_exit的用法解析

    官方说法: 函数pthread_join用来等待一个线程的结束.函数原型为: extern int pthread_join __P ((pthread_t __th, void **__thread ...

  4. 路飞学城Python-Day4(practise)

    #1.请用代码实现:利用下划线将列表的每一个元素拼接成字符串,li = ['alex','eric','rain']# li = ['alex','eric','rain']# print('_'.j ...

  5. GUI 图形用户界面 [学习笔记]

    今晚返璞归真了一把, 系统了解了一下GUI的有关知识: GUI(Graphical User Interface) 图形用户界面 是指采用图形方式显示的计算机操作用户接口.与早期计算机使用的命令行界面 ...

  6. UVA-10003 Cutting Sticks 动态规划 找分界点k的动规

    题目链接:https://cn.vjudge.net/problem/UVA-10003 题意 有根棍子,上面有些分割点(n<50),每次按分割点切割棍子时,费用为当前棍子的长度. 问有什么样的 ...

  7. 《Linux 进程间通信》命名管道:FIFO

    命名管道的主要用途:不相关的进程之间交换数据. 命令行上创建命名管道: $ mkfifo filename  程序中创建命名管道: #include <sys/types.h> #incl ...

  8. caioj 1161 欧拉函数3:可见点数

    (x, y)被看到仅当x与y互质 由此联想到欧拉函数 x=y是1个点,然后把正方形分成两半,一边是φ(n) 所以答案是2*∑φ(n)+1 #include<cstdio> #include ...

  9. Jedis无法连接centOS7上的redis

    通过查看资料无法连接基本是两个原因: 1)redis.conf中的bind配置,bind的默认是 127.0.0.1 只可本机访问,我们改为 bind 0.0.0.0 即所有地址均可访问. 2)cen ...

  10. HDU——T 2444 The Accomodation of Students

    http://acm.hdu.edu.cn/showproblem.php?pid=2444 Time Limit: 5000/1000 MS (Java/Others)    Memory Limi ...