ObjectDataSourc用法之三(排序)
ObjectDataSourc用法之三(排序)
SortParameterName參數主要用於對數據源控件進尾排序
1. 准備條件
參數:ObjectDataSource用法之一(SelectMethod來進行簡單的邦定)
添加一個處理對象排序的類Reverser
public class Reverser<T> : IComparer<T>
{
private Type type = null;
private ReverserInfo info;
public Reverser(string className, string name, ReverserInfo.Direction direction)
{
try
{
this.type = Type.GetType(className, true);
this.info.name = name;
this.info.direction = direction;
}
catch (Exception e)
{
throw new Exception(e.Message);
}
}
int IComparer<T>.Compare(T t1, T t2)
{
object x = this.type.InvokeMember(this.info.name, BindingFlags.Public | BindingFlags.Instance | BindingFlags.GetProperty, null, t1, null);
object y = this.type.InvokeMember(this.info.name, BindingFlags.Public | BindingFlags.Instance | BindingFlags.GetProperty, null, t2, null);
if (this.info.direction != ReverserInfo.Direction.ASC)
Swap(ref x, ref y);
return (new CaseInsensitiveComparer()).Compare(x, y);
}
private void Swap(ref object x, ref object y)
{
object temp = null;
temp = x;
x = y;
y = temp;
}
}
public struct ReverserInfo
{
public enum Direction
{
ASC = 0,
DESC,
};
public enum Target
{
CUSTOMER = 0,
FORM,
FIELD,
SERVER,
};
public string name;
public Direction direction;
public Target target;
}
2. 在業務處理類中添加如下方法
public List<EntityMember> OrderItems(string order)
{
string orderName = order.Split(' ')[0];
ReverserInfo.Direction dir = ReverserInfo.Direction.ASC;
if (order.Split(' ').Length>1 && order.Split(' ')[1] == "DESC") dir = ReverserInfo.Direction.DESC;
List<EntityMember> result = new List<EntityMember>();
XmlDocument doc = new XmlDocument();
doc.Load(_path);
XmlNodeList nodes = doc.SelectNodes("/Members/Member");
foreach (XmlNode node in nodes)
{
result.Add(new EntityMember(node.SelectSingleNode("./UID").InnerText, node.SelectSingleNode("./PWD").InnerText, node.SelectSingleNode("./Email").InnerText));
}
Reverser<EntityMember> reverser = new Reverser<EntityMember>("EntityMember", orderName, dir);
result.Sort(reverser);
return result;
說明:當按降序排列的時候,參數order的內容為:屬性名稱+空格+DESC
當按升序排列的時候,參數order的內容為:屬性名稱
3. Aspx頁面的內容為
<asp:ObjectDataSource ID="ObjectDataSource1" runat="server"
SelectMethod="OrderItems" SortParameterName="order" TypeName="Member"></asp:ObjectDataSource>
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False"
DataSourceID="ObjectDataSource1" AllowSorting="true">
<Columns>
<asp:BoundField DataField="UID" HeaderText="UID" SortExpr
<asp:BoundField DataField="PWD" HeaderText="PWD" SortExpr
<asp:BoundField DataField="Email" HeaderText="Email" SortExpr
</Columns>
</asp:GridView>
說明:SortParameterName為指定SelectMethod參數指定的方法中用於排序的參數名稱
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架