例如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;//绑定数据
时间: 2024-12-29 06:48:51