一、背景
从数据库中查找的数据没有进行排序操作,在某些场合又需要排序操作,但不可能浪费资源重新从数据库中进行查找,最方便的就是直接在代码上写上,这样俩不误。
二、操作
第一种:利用视图排序
此方法最为简单,如果就是根据某一列进行排序,使用这个方法最简单也最美观,该方法默认以升序进行排序,如果想要降序需要和SQL类型添加desc
,下面的代码就是这个例子。相关的示例代码如下:
public void test(){
DataTable dt = new DataTable();
dt.Columns.Add("描述", typeof(String));
dt.Columns.Add("数值", typeof(Decimal));
dt.Rows.Add(new Object[] { "一月", 18 });
dt.Rows.Add(new Object[] { "二月", 33 });
dt.Rows.Add(new Object[] { "三月", 20 });
dt.Rows.Add(new Object[] { "四月", 1 });
dt.Rows.Add(new Object[] { "五月", 12 });
dt.Rows.Add(new Object[] { "六月", 8 });
DataTable sortTable = dt.Clone();
DataView dv = dt.DefaultView;
dv.Sort = "数值 desc";
sortTable = dv.ToTable();
}
第一种方法结果如图:
第二种:利用查询排序
与SQL相似,利用查询条件和sort条件进行查找,如果所做的功能使用的是静态数据(不是实时变化的),可以从数据库中将数据查询下来,然后再利用这个查询进行仿SQL查询,这个可以节省数据库的资源。
相关排序的语句如下所示:
public void test(){
DataTable dt = new DataTable();
dt.Columns.Add("描述", typeof(String));
dt.Columns.Add("数值", typeof(Decimal));
dt.Rows.Add(new Object[] { "一月", 18 });
dt.Rows.Add(new Object[] { "二月", 33 });
dt.Rows.Add(new Object[] { "三月", 20 });
dt.Rows.Add(new Object[] { "四月", 1 });
dt.Rows.Add(new Object[] { "五月", 12 });
dt.Rows.Add(new Object[] { "六月", 8 });
DataTable selectTable = dt.Clone();
DataRow[] rows = dt.Select("1=1", "数值 asc");
foreach(DataRow dr in rows)
{
DataRow newRow = selectTable.NewRow();
for(int i = 0; i < dt.Columns.Count; i++)
{
newRow[dt.Columns[i].ColumnName] = dr[dt.Columns[i].ColumnName];
}
selectTable.Rows.Add(newRow);
}
}
第二种方法结果图:
第三种:自己编写排序条件代码
这种方法是最容易想到的,如果上面两个方法不能满足需求,可以进行自己编写排序方法,道理很简单,通过判断条件将数据进行排序并赋值到table中,这个具体方法随个人想法随意写。
三、总结
不少问题前人已经遇到并写出了相应的方法,并且方法写的很优秀,在此记录一下,以便以后的编写