Repeater分页功能我就不说了,网上这样的例子很多。而且本来想放在《Repeater控件里的大智慧》里面,但这个内容相当的多,而且内容很晦涩。所以就提出来单独来说。 这个方法是我从网上看到了,这里我就是和大家一起来分析下这些代码。当弄懂以后,就可以根据自己的情况来写代码了。(我也将穿插一些我修改后的代码,以作参考。) 下面我先给大家一段我看到网上提供的完整代码。复制过去就可以直接运行了。 代码地址:http://www.cnblogs.com/shouzheng/archive/2008/04/17/1158281.html
建议大家把这些代码复制过去,然后运行跟踪下整个流程。等自己对这些代码有一定的了解时,再来看我写的注释。否则,看是很难看懂的。 前台关键就是这些脚本。仅仅看前台代码是看不出前台调用了这些脚本,所以后台代码才是我们所要掌握的重点。
前台: } function ReceiveCallback(arg, context) {
后台: namespace WebApplication4 //这3条语句你都可以不要修改直接照抄,功能是将后台的代码直接注册到前台中并执行。 } /**/ if (pageIndex > pages)//似乎没用 int startId = (pageIndex - 1) * PAGESIZE + 1; //起始页 DataRow[] rows = dt.Select(string.Format("ID>={0} and ID<={1}", startId, endId)); //这里是数据的绑定,如果你一直按照他的思路,那你就完了,因为原作者是自己临时写的数据源,而你的数据源是在数据库中 //所以修改代码是必须的。这里用到了分页的类PagedDataSource // DataTable dt = GetData(); //获取数据 /**/ /**/ DataRow row = dt.NewRow(); row = dt.NewRow(); row = dt.NewRow(); row = dt.NewRow(); row = dt.NewRow(); row = dt.NewRow(); row = dt.NewRow(); row = dt.NewRow(); row = dt.NewRow(); row = dt.NewRow(); Cache["Data"] = dt; //显然原作者只是为了演示无刷新功能,才自己写数据源(从整个代码来看,可见原作者功底之深厚) //那么我们就得写自己的获取数据代码 //这个就不用我写了吧,只要从数据库获取后以DataTable的形式返回即可。 #region 实现ICallbackEventHandler 成员RaiseCallbackEvent#region 实现ICallbackEventHandler 成员RaiseCallbackEvent //这个就是实现无刷新的回调方法了。 //其实我们所说的无刷新分页,只是看上去不刷新,其运行时数据还是刷新的,要不然怎么让不同的页面显示不同的内容呢? //它是以回调的机制获取新的数据流然后再将新的数据流重新绘制显示出来 public void RaiseCallbackEvent(string eventArgument) public string GetCallbackResult() /**/ control.RenderControl(writer2);
//显示数据 //显示数据这个一般自己有自己定义的显示数据形式,所以这个可以根据自己需求修改它,你设置可以不要它,自己重新来写 DataRow row = e.Item.DataItem as DataRow; |
最近有朋友在问,如果不使用ajax.net,ajaxpro等等开发包,有没有别的办法写客户端脚本让Repeater实现无刷新分页,答案当然是有的。其他那些开发包无非是帮我们完成好了回发的各种接口,可是,开发包面向的是通用的情况,然不得已需要引入的脚本库有相当的容量,但我们不需要全部,现介绍一种最轻量级的无刷新分页办法(以Repeater为例)。
首先说一下实现的依据,asp.net中有这样一个方法GetCallbackEventReference。它的作用是获取一个对客户端函数的引用;调用该函数时,将启动一个对服务器事件的客户端回调。先可以不用理解透这句话的意思,只需要记住它能获取一段脚本,让客户端调用后实现回发到服务端。废话不多说了,赶紧跟着操作如下:
建立一个WebSite,当然你要用WebProject也无妨,然后增加一个WebForm,假定名为default。
default.aspx内容是
2
3 %>
4
5 <! DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
6
7 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" >
8 < html xmlns ="http://www.w3.org/1999/xhtml" >
9 < head runat ="server" >
10 < title > CallBack </ title >
11
12 < script language ="javascript" type ="text/javascript" >
13 function turnPage(pageIndex){
14 CallServer(pageIndex, ' content ' );
15 }
16
17 function ReceiveCallback(arg,context){
18 var container = document.getElementById(context);
19 // alert(arg + " " + context);
20 container.innerHTML = arg;
21 }
22 </ script >
23
24 </ head >
25 < body >
26 < form id ="form1" runat ="server" >
27 < div id ="content" >
28 < asp:Repeater ID ="List" runat ="server" OnItemDataBound ="List_ItemDataBound" >
29 < ItemTemplate >
30 < div >
31 用户名: < asp:Label ID ="NickName" runat ="server" ></ asp:Label >
32 QQ号: < asp:Label ID ="QNumber" runat ="server" ></ asp:Label >
33 </ div >
34 </ ItemTemplate >
35 </ asp:Repeater >
36 </ div >
37 < asp:Literal ID ="Pager" runat ="server" ></ asp:Literal >
38 </ form >
39 </ body >
40 </ html >
default.aspx.cs内容是

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



43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63


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

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

151

152

153

154

155

156



157

158

159

160

161

162


163

164

165



166

167

168

169

170

171



172

173

174

175

176

177

178



179

180

181

182



183

184

185

186

187

188

189

190

191

192


193

194

195

196

197

198



199

200

201

202

203

204

205

206

207

208

正如代码所示,需要实现ICallbackEventHandler接口的两个方法,RaiseCallbackEvent用于接收到客户端传回来的参数,GetCallbackResult是在服务端做出合适的反应后将指定的结果发送回客户端,这里是把repeater重画的内容返回了,然后在客户端ReceiveCallback函数里进行无刷新的最后展现,最想说明的是,一定要注意CallServer(pageIndex,'content');ReceiveCallback(arg,context);这两个函数的使用技巧,CallServer是服务端生成的,它的第二个参数直接决定了在什么地方无刷新,ReceiveCallback和前者都是context参数,内容就是相同的,相当于传到服务器再原封不动的传回来,因此用于回发和接收时共享数据。
小示例可变换多种实现,希望大家都能找到适合自己简便实现的办法。