Repeater 双向排序
2007-03-23 23:30 蓝之风 阅读(2873) 评论(6) 编辑 收藏 举报
做项目的时候,DataGrid ,DataList,Repeater 三个控件都是很优秀的数据显示控件,DataGrid的方便,简单易用,功能强大,但对性能会有所影响,在loading页面的时候大量的Html会占用一些时间,DataList 较之DataGrid功能显然减少一些,经常在一些特殊的页面制作或需求中来用,经常简单的页面显示收据表格,使用Repeater+Table即方便又快捷,但是却没有DataGrid那样方便,最近做项目,全部使用Repeater,但是客户突然要求要对数据表格进行排序,惨了~~~~~,第一印象就是DataGrid控件有排序功能,要换控件吗?靠,那么多表单,全部换DataGrid会出人命,于是就想办法,来实现Repeater的排序。下面就是我做的一个Repeater实现双向排序的例子:主要使用LinkButton,Repeater,ViewState,Cache结合来完成的。
效果如下图:

下载原代码:/Files/vaiyanzi/Attch/RepeaterOrder.rar
前台Html代码:

1
using System;
2
using System.Collections;
3
using System.ComponentModel;
4
using System.Data;
5
using System.Drawing;
6
using System.Web;
7
using System.Web.SessionState;
8
using System.Web.UI;
9
using System.Web.UI.WebControls;
10
using System.Web.UI.HtmlControls;
11
using System.Data.SqlClient;
12
using System.Configuration;
13
14
namespace RepeaterOrder
15
{
16
/// <summary>
17
/// RepeaterOrderForm 的摘要说明。
18
/// </summary>
19
public class RepeaterOrderForm : System.Web.UI.Page
20
{
21
protected System.Web.UI.WebControls.Repeater rpOrder;
22
private readonly string CONNECTIONSTRING=ConfigurationSettings.AppSettings["ConnectionString"];
23
private void Page_Load(object sender, System.EventArgs e)
24
{
25
if(!IsPostBack)
26
{
27
BindRepeater();
28
}
29
}
30
private DataView GetData
31
{
32
get
33
{
34
return Cache["_data"] as DataView;
35
}
36
set
37
{
38
if( Cache["_data"]==null)
39
Cache["_data"]=value;
40
}
41
}
42
Web 窗体设计器生成的代码
64
65
private SqlConnection Conn()
66
{
67
return new SqlConnection(CONNECTIONSTRING);
68
}
69
70
private void BindRepeater()
71
{
72
DataSet ds=new DataSet();
73
SqlDataAdapter da=new SqlDataAdapter("Select * From Employees",Conn());
74
da.Fill(ds);
75
GetData=ds.Tables[0].DefaultView;
76
rpOrder.DataSource=ds.Tables[0];
77
rpOrder.DataBind();
78
}
79
80
private void rpOrder_ItemCommand(object source, RepeaterCommandEventArgs e)
81
{
82
if(e.Item.ItemType==ListItemType.Header)
83
{
84
LinkButton lkbtnSort=(LinkButton)e.Item.FindControl(e.CommandName.Trim());
85
if(ViewState[e.CommandName.Trim()]==null)
86
{
87
ViewState[e.CommandName.Trim()]="ASC";
88
lkbtnSort.Text=lkbtnSort.Text+"▲";
89
}
90
else
91
{
92
if(ViewState[e.CommandName.Trim()].ToString().Trim()=="ASC")
93
{
94
ViewState[e.CommandName.Trim()]="DESC";
95
if(lkbtnSort.Text.IndexOf("▲")!=-1)
96
lkbtnSort.Text=lkbtnSort.Text.Replace("▲","▼");
97
else
98
lkbtnSort.Text=lkbtnSort.Text+"▼";
99
}
100
else
101
{
102
ViewState[e.CommandName.Trim()]="ASC";
103
if(lkbtnSort.Text.IndexOf("▼")!=-1)
104
lkbtnSort.Text=lkbtnSort.Text.Trim().Replace("▼","▲");
105
else
106
lkbtnSort.Text=lkbtnSort.Text+"▲";
107
}
108
}
109
ViewState["text"]=lkbtnSort.Text;
110
ViewState["id"]=e.CommandName.Trim();
111
DataView dv=GetData;
112
dv.Sort=e.CommandName.ToString().Trim()+" "+ViewState[e.CommandName.Trim()].ToString().Trim();
113
rpOrder.DataSource=dv;
114
rpOrder.DataBind();
115
}
116
}
117
118
private void rpOrder_ItemDataBound(object sender, RepeaterItemEventArgs e)
119
{
120
if(e.Item.ItemType==ListItemType.Header)
121
{
122
if(ViewState["id"]!=null)
123
{
124
LinkButton lkbtnSort=(LinkButton)e.Item.FindControl(ViewState["id"].ToString().Trim());
125
lkbtnSort.Text=ViewState["text"].ToString();
126
}
127
}
128
}
129
}
130
}
131
效果如下图:
下载原代码:/Files/vaiyanzi/Attch/RepeaterOrder.rar
前台Html代码:
<%@ Page language="c#" Codebehind="RepeaterOrderForm.aspx.cs" AutoEventWireup="false" Inherits="RepeaterOrder.RepeaterOrderForm" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
<HEAD>
<title>RepeaterOrderForm</title>
<meta name="GENERATOR" Content="Microsoft Visual Studio .NET 7.1">
<meta name="CODE_LANGUAGE" Content="C#">
<meta name="vs_defaultClientScript" content="JavaScript">
<meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
</HEAD>
<body MS_POSITIONING="GridLayout">
<form id="Form1" method="post" runat="server">
<table border=1 bordercolor=#330033 bordercolordark=#999933 bordercolorlight=black>
<tr>
<td colspan=5 align=center><font color=blue size=12>Repeater实现双向排序功能</font></td>
</tr>
<asp:Repeater id="rpOrder" runat="server">
<HeaderTemplate>
<tr align=center >
<td>
<asp:LinkButton ID="LastName" Runat="server" text="LastName" CommandName="LastName"></asp:LinkButton></td>
<td>
<asp:LinkButton ID="FirstName" Runat="server" text="FirstName" CommandName="FirstName"></asp:LinkButton></td>
<td>
<asp:LinkButton ID="Title" Runat="server" text="Title" CommandName="Title"></asp:LinkButton></td>
<td>
<asp:LinkButton ID="Address" Runat="server" text="Address" CommandName="Address"></asp:LinkButton></td>
<td>
<asp:LinkButton ID="City" Runat="server" text="City" CommandName="City"></asp:LinkButton></td>
</tr>
</HeaderTemplate>
<ItemTemplate>
<tr>
<td><%# DataBinder.Eval(Container.DataItem,"LastName")%></td>
<td><%# DataBinder.Eval(Container.DataItem,"FirstName")%></td>
<td><%# DataBinder.Eval(Container.DataItem,"Title")%></td>
<td><%# DataBinder.Eval(Container.DataItem,"Address")%></td>
<td><%# DataBinder.Eval(Container.DataItem,"City")%></td>
</tr>
</ItemTemplate>
</asp:Repeater>
</table>
</form>
</body>
</HTML>

后台CS文件:














































1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

作者:蓝之风
出处:http://www.cnblogs.com/vaiyanzi/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
【推荐】国内首个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 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架