zoukankan      html  css  js  c++  java
  • C# 对Datatable排序

    一,在C#中要对Datatable排序,可使用DefaultView的Sort方法。先获取Datatable的DefaultView,然后设置 得到的Dataview的sort属性,最后用视图的ToTable方法将排好序的dataview导出为Datatable。
         代码如下:
                DataTable dt = new DataTable();
                dt.Columns.Add("ID", typeof(int));
                dt.Columns.Add("Name", typeof(string));

                dt.Rows.Add(new object[] { 12, "lwolf" });
                dt.Rows.Add(new object[] { 100,"kkkkk"});
                dt.Rows.Add(new object[] { 19,"jim" });
                dt.Rows.Add(new object[] { 1,"test" });

                DataTable dtCopy = dt.Copy(); //注释
                DataView dv = dt.DefaultView;
                dv.Sort = "ID";
                dtCopy = dv.ToTable();

         dt.DefaultView.Sort = "Age ASC";
            dt = dt.DefaultView.ToTable();

    二,具体排序示例

    protected void Page_Load(object sender, EventArgs e)
        {
            DataTable dt = new DataTable();
            dt.Columns.Add("Name");
            dt.Columns.Add("Age");//因为是字符串,所以排序不对
            dt.Rows.Add("小明", "21");
            dt.Rows.Add("小张", "10");
            dt.Rows.Add("小红", "9");
            dt.Rows.Add("小伟", "7");
            dt.Rows.Add("小美", "3");
            dt.DefaultView.Sort = "Age ASC";
            dt = dt.DefaultView.ToTable();

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

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

            dt = dt.DefaultView.ToTable();

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

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

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

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

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

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

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

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

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

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

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

     三,

    DataTable的Select()方法返回的是一个DataRow的数组,
    在你的代码中 dt31 = dt30.Select("发票号= '"+a+"'");显然dt31是Datatable类型,赋值号后面是DataRow数组。
    分析楼主的意思,可能是想要dt30中的发票号为 a的数据,组成一个新的Datatable作为Gridview的数据源吧?
    要是的话可以用下面的代码:
    string a;
    a =dt30.Rows[0][1].ToString();
    DataView dataView = dt30.DefaultView;//定义一个DataView为dt30的默认视图
    dataView.RowFilter = "发票号 = '"+a+"'"; //对dataView进行筛选

    this.dataGridView5.DataSource = dataView;//筛选后的dataView做数据源

  • 相关阅读:
    阿里云 k8s 部署 Spring Cloud Alibaba 微服务实践 (四) 自动化部署
    阿里云 k8s 部署 Spring Cloud Alibaba 微服务实践 (三) 服务观测
    阿里云 k8s 部署 Spring Cloud Alibaba 微服务实践 (二) 部署微服务程序
    阿里云 k8s 部署 Spring Cloud Alibaba 微服务实践 (一) 部署 Nacos
    C++知识点
    libmkl 学习笔记
    基于tesseract-OCR进行中文识别
    poco编译与运行
    Linux下的I/O复用与epoll详解(转载)
    高并发网络编程之epoll详解(转载)
  • 原文地址:https://www.cnblogs.com/Unrmk-LingXing/p/4048990.html
Copyright © 2011-2022 走看看