一个管理排序的类,支持多排序。
环境:.NET,C#
/// <summary>
/// 排序管理器
/// </summary>
public class DBOrderByOpt
{
protected struct ____Task____
{
public string fieldName;
public bool ASC;
public ____Task____(string fieldName, bool ASC)
{
this.fieldName = fieldName;
this.ASC = ASC;
}
};
private IList<____Task____> orderByData;
/// <summary>
/// 默认构造函数
/// </summary>
public DBOrderByOpt()
{
orderByData = new List<____Task____>();
}
/// <summary>
/// 增加排序字段并调整字段优先级
/// </summary>
public void AddChg(string fieldName)
{
bool asc = true;
foreach (____Task____ data in orderByData)
{
if (data.fieldName.Trim() == fieldName.Trim())
{
asc = !data.ASC;
orderByData.Remove(data);
break;
}
}
orderByData.Add(new ____Task____(fieldName.Trim(), asc));
}
/// <summary>
/// 增加排序字段但保持字段优先级
/// </summary>
public void AddUnChg(string fieldName)
{
int i = 0;
bool asc = true;
for (; i < orderByData.Count; i++)
{
if (orderByData.fieldName.Trim() == fieldName.Trim())
{
asc = !orderByData.ASC;
orderByData.Remove(orderByData);
break;
}
}
orderByData.Insert(i, new ____Task____(fieldName.Trim(), asc));
}
/// <summary>
/// 获取正向排序字符串
/// </summary>
public string ToOrderString()
{
string orderStr = "";
for (int i = 0; i < orderByData.Count; i++)
{
if (orderByData.ASC)
orderStr += orderByData.fieldName + " asc, ";
else
orderStr += orderByData.fieldName + " desc, ";
}
if (orderStr.Trim() == "")
return "";
else
return orderStr.Substring(0, orderStr.Length - 2);
}
/// <summary>
/// 获取反向排序字符串
/// </summary>
public string ToReOrderString()
{
string orderStr = "";
for (int i = orderByData.Count - 1; i >= 0; i--)
{
if (orderByData.ASC)
orderStr += orderByData.fieldName + " asc, ";
else
orderStr += orderByData.fieldName + " desc, ";
}
if (orderStr.Trim() == "")
return "";
else
return orderStr.Substring(0, orderStr.Length - 2);
}
}