度量快速开发平台-专业、快速的软件定制快开平台

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 部件 流程 SQL
查看: 1713|回复: 5
打印 上一主题 下一主题

[分享] C#对DataTable里数据排序的方法

[复制链接]

542

主题

5916

帖子

1万

积分

作者

Rank: 7Rank: 7Rank: 7

积分
13589
跳转到指定楼层
楼主
发表于 2020-5-18 16:53:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  1. protected void Page_Load(object sender, EventArgs e)
  2.     {
  3.         DataTable dt = new DataTable();
  4.         dt.Columns.Add("Name");
  5.         dt.Columns.Add("Age");//因为是字符串,所以排序不对
  6.         dt.Rows.Add("小明", "21");
  7.         dt.Rows.Add("小张", "10");
  8.         dt.Rows.Add("小红", "9");
  9.         dt.Rows.Add("小伟", "7");
  10.         dt.Rows.Add("小美", "3");
  11.         dt.DefaultView.Sort = "Age ASC";
  12.         dt = dt.DefaultView.ToTable();

  13.         foreach (DataRow s in dt.Rows)
  14.         {
  15.             Response.Write(s["Age"].ToString() + "--" + s["Name"].ToString() + "<br/>");
  16.         }
  17.         Response.Write("------------------1----------------<br/>");


  18.         #region 方法1:将年龄补齐为2位,然后再进行排序,但是实际不应该有0(仅作参考)
  19.         for (int i = 0; i < dt.Rows.Count; i++)
  20.         {
  21.             dt.Rows[i]["Age"] = dt.Rows[i]["Age"].ToString().PadLeft(2, '0');
  22.         }
  23.         dt.DefaultView.Sort = "Age ASC";

  24.         dt = dt.DefaultView.ToTable();

  25.         foreach (DataRow s in dt.Rows)
  26.         {
  27.             Response.Write(s["Age"].ToString() + "--" + s["Name"].ToString() + "<br/>");
  28.         }
  29.         #endregion

  30.         Response.Write("------------------2----------------<br/>");

  31.         #region 方法2:创建新的DataTable,将Age类型变更为int类型
  32.         DataTable dtNew = dt.Clone();
  33.         dtNew.Columns["Age"].DataType = typeof(int);//指定Age为Int类型
  34.         foreach (DataRow s in dt.Rows)
  35.         {
  36.             dtNew.ImportRow(s);//导入旧数据
  37.         }

  38.         dtNew.DefaultView.Sort = "Age ASC";
  39.         dtNew = dtNew.DefaultView.ToTable();

  40.         foreach (DataRow s in dtNew.Rows)
  41.         {
  42.             Response.Write(s["Age"].ToString() + "--" + s["Name"].ToString() + "<br/>");
  43.         }
  44.         #endregion

  45.         Response.Write("-----------------3-----------------<br/>");

  46.         #region 方法3:添加一列,主要用于排序
  47.         dt.Columns.Add("AgeLength", typeof(int), "len(Age)");//添加该列时,DataTable列数据即生成

  48.         dt.DefaultView.Sort = "AgeLength,Age ASC";
  49.         dt = dt.DefaultView.ToTable();

  50.         foreach (DataRow s in dt.Rows)
  51.         {
  52.             Response.Write(s["Age"].ToString() + "--" + s["Name"].ToString() + "<br/>");
  53.         }
  54.         #endregion

  55.         Response.Write("-----------------4-----------------<br/>");

  56.         #region 方法4:运用LinQ,将DataTable转换为集合,再调用集合自带的排序方法进行排序
  57.         foreach (DataRow s in dt.Rows.Cast<DataRow>().OrderBy(r => int.Parse(r["Age"].ToString())))
  58.         {
  59.             Response.Write(s["Age"].ToString() + "--" + s["Name"].ToString() + "<br/>");
  60.         }
  61.         #endregion
  62.     }
复制代码

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

542

主题

5916

帖子

1万

积分

作者

Rank: 7Rank: 7Rank: 7

积分
13589
沙发
 楼主| 发表于 2020-5-18 16:54:14 | 只看该作者
回复 支持 反对

使用道具 举报

542

主题

5916

帖子

1万

积分

作者

Rank: 7Rank: 7Rank: 7

积分
13589
板凳
 楼主| 发表于 2020-5-20 14:27:27 | 只看该作者
回复 支持 反对

使用道具 举报

235

主题

2547

帖子

5835

积分

论坛元老

Rank: 8Rank: 8

积分
5835
地板
发表于 2020-5-28 17:38:13 | 只看该作者
回复 支持 反对

使用道具 举报

542

主题

5916

帖子

1万

积分

作者

Rank: 7Rank: 7Rank: 7

积分
13589
5#
 楼主| 发表于 2020-5-29 13:57:24 | 只看该作者
回复 支持 反对

使用道具 举报

235

主题

2547

帖子

5835

积分

论坛元老

Rank: 8Rank: 8

积分
5835
6#
发表于 2020-6-3 17:07:16 | 只看该作者
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|重庆度量科技  本站关键词:快速开发平台

GMT+8, 2024-11-23 15:12 , Processed in 0.178997 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表