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
}