玉祥平台客服-15087858732

标题: C#对DataTable里数据排序的方法 [打印本页]

作者: 张兴康    时间: 2020-5-18 16:53
标题: C#对DataTable里数据排序的方法
  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.     }
复制代码


作者: 张兴康    时间: 2020-5-18 16:54

作者: 张兴康    时间: 2020-5-20 14:27

作者: fteair    时间: 2020-5-28 17:38

作者: 张兴康    时间: 2020-5-29 13:57
fteair 发表于 2017-12-28 17:38


作者: fteair    时间: 2020-6-3 17:07
张兴康 发表于 2017-12-29 13:57






欢迎光临 玉祥平台客服-15087858732 (http://bbs.delit.cn/) Powered by Discuz! X3.2