C# DataTable中按字符串中的数字排序

例如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 = 0;
            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;//绑定数据

 

posted @ 2015-06-02 10:33  Creatisan  阅读(2529)  评论(0编辑  收藏  举报