欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

C#对DataTable里数据排序的方法

程序员文章站 2024-02-21 15:55:34
直接给个实例代码吧复制代码 代码如下:protected void page_load(object sender, eventargs e)  &nb...

直接给个实例代码吧

复制代码 代码如下:

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
    }