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;//绑定数据

 

转载于:https://www.cnblogs.com/joysky/p/4545732.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
首先,您需要在C#使用SQL Server连接字符串连接到您的数据库。然后,您可以使用SQL查询从两个表获取数据,将结果存储在一个DataTable。接下来,您可以将DataTable的数据复制到一个数组,并使用Array.Sort方法对其进行排序。以下是一个简单的示例代码: ```csharp using System; using System.Data; using System.Data.SqlClient; class Program { static void Main(string[] args) { string connectionString = "Data Source=myServerAddress;Initial Catalog=myDataBase;User ID=myUsername;Password=myPassword"; string query = "SELECT * FROM Table1 UNION ALL SELECT * FROM Table2"; SqlDataAdapter adapter = new SqlDataAdapter(query, connectionString); DataTable dataTable = new DataTable(); adapter.Fill(dataTable); // Copy data to array DataRow[] rows = new DataRow[dataTable.Rows.Count]; dataTable.Rows.CopyTo(rows, 0); // Sort array Array.Sort(rows, (a, b) => ((int)a["ID"]).CompareTo((int)b["ID"])); // Print sorted array foreach (DataRow row in rows) { Console.WriteLine(row["ID"] + " " + row["Name"]); } } } ``` 在上面的示例,我们使用UNION ALL运算符将两个表的数据合并到一个查询。然后,我们使用SqlDataAdapter将查询结果填充到一个DataTable。接下来,我们使用DataRow数组将DataTable的数据复制到一个数组,并使用Array.Sort方法对其进行排序。最后,我们遍历排序后的数组并打印每一行的ID和Name。请注意,我们使用了一个lambda表达式作为比较器来比较行的ID值。您可以根据需要修改比较器来排序不同的列或以不同的顺序排序
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值