(转)一个带自定义分页,排序功能的DATAGRID控件(公开源码)
因为项目需要,要弄个有这样功能的控件。要有自定意分页和排序的功能。在这个控件里面数据的绑定都是用DataView来实现,DataView放在Session里,如果大家有更灵活的方法可以留言给我。Session的名字我已经做成了属性叫sessionName,可以直接设置,你们喜欢叫什么就自己改吧。以下是完整的代码,由于是刚刚出炉,可能会有考虑不足的地方,希望使用或修改的朋友多提意见一起交流,我分享我快乐:)
下面是可以使用的控件
先下载过的朋友,那个DLL文件有问题,下这个新的,下面的程序代码也改了一个小地方271行
该控件使用方法和DataGrid一样,需要分页时必须设置分页功能为true
LcDataGrid.rar
1
using System;
2
using System.Web.UI;
3
using System.Web.UI.WebControls;
4
using System.ComponentModel;
5
using System.Data;
6
7
namespace LcWebControls
8
{
9
/// <summary>
10
/// 卢昶 2005-7-11
11
/// Email:darkangel@ynmail.com
12
/// msn:darkangellc@msn.com
13
/// </summary>
14
[DefaultProperty("Text"),
15
ToolboxData("<{0}:LcDataGrid runat=server></{0}:LcDataGrid>")]
16
public class LcDataGrid : System.Web.UI.WebControls.DataGrid
17
{
18
#region Define
19
private string text;
20
private System.Web.UI.WebControls.Button bt=new Button();
21
private TextBox tb=new TextBox();
22
private System.Web.UI.Page pg=new Page();
23
private string sessionname;
24
private LinkButton PrevPAGE=new LinkButton();
25
private LinkButton NextPAGE=new LinkButton();
26
private DropDownList ddl=new DropDownList();
27
private Label lbend=new Label();
28
private Label lbtag=new Label();
29
private Label lbddls=new Label();
30
private Label lbddle=new Label();
31
32
#endregion
33
#region displayPortery
34
35
public int Currindex
36
{
37
set
38
{
39
try
40
{
41
this.CurrentPageIndex=value;
42
}
43
catch
44
{
45
46
}
47
48
}
49
get
50
{
51
return this.CurrentPageIndex;
52
}
53
}
54
#endregion
55
#region Property
56
57
58
[Bindable(true),
59
Category("Appearance"),
60
DefaultValue("")]
61
public string Text
62
{
63
get
64
{
65
return text;
66
}
67
68
set
69
{
70
text = value;
71
}
72
}
73
[Bindable(true),
74
Category("Appearance"),
75
DefaultValue(""),
76
DescriptionAttribute("Session的名称,Session用于数据绑定,必须是DataView类型")
77
]
78
public string sessionName
79
{
80
get
81
{
82
return sessionname;
83
}
84
set
85
{
86
sessionname=value;
87
88
}
89
}
90
[Bindable(true),
91
Category("Appearance"),
92
DefaultValue("")]
93
public string TT
94
{
95
get
96
{
97
try
98
{
99
100
return this.ViewState["sort"].ToString();
101
}
102
catch
103
{
104
this.ViewState["sort"]="asc";
105
return this.ViewState["sort"].ToString();
106
}
107
108
}
109
set
110
{
111
this.ViewState["sort"]=value;
112
}
113
114
}
115
116
#endregion
117
118
/// <summary>
119
/// 将此控件呈现给指定的输出参数。
120
/// </summary>
121
/// <param name="output"> 要写出到的 HTML 编写器 </param>
122
123
protected override void OnItemCreated(DataGridItemEventArgs e)
124
{
125
126
if(e.Item.ItemType == ListItemType.Pager)
127
{
128
e.Item.Cells[0].Controls.Clear();
129
TextBox tb=new TextBox();
130
creatControl(e.Item.Cells[0]);
131
}
132
133
134
}
135
protected override void OnItemCommand(DataGridCommandEventArgs e)
136
{
137
string strCommandName = e.CommandName;
138
if(e.CommandName == null)
139
return;
140
141
strCommandName = string.IsInterned(strCommandName);
142
switch(e.CommandName)
143
{
144
145
case "PrevPAGE":
146
{
147
PrevPAGE_Click(null,null);
148
break;
149
}
150
case "NextPAGE":
151
{
152
NextPAGE_Click(null,null);
153
break;
154
}
155
156
}
157
base.OnItemCommand(e);
158
}
159
160
protected override void OnItemDataBound(DataGridItemEventArgs e)
161
{
162
163
if(e.Item.ItemType==ListItemType.Item||e.Item.ItemType==ListItemType.AlternatingItem)
164
{
165
e.Item.Attributes.Add("style","cursor:hand");
166
e.Item.Attributes.Add("onmouseover","this.style.backgroundColor='#FFCC00'");
167
e.Item.Attributes.Add("onmouseout","this.style.backgroundColor=''");
168
}
169
}
170
protected override void OnSortCommand(DataGridSortCommandEventArgs e)
171
{
172
base.OnSortCommand (e);
173
DataView dv=(DataView)this.Page.Session[sessionName];
174
if (TT.Equals("desc"))
175
{
176
dv.Sort=e.SortExpression+" asc";
177
TT="asc";
178
}
179
else
180
{
181
dv.Sort=e.SortExpression+" desc";
182
TT="desc";
183
}
184
185
186
this.DataSource=dv;
187
this.DataBind();
188
this.Page.Session[sessionName]=dv;
189
}
190
191
192
193
194
#region InitDataGird
195
196
protected void creatControl(TableCell tc)
197
{
198
199
creatPageCount(tc);
200
creatCount(tc);
201
creatSPage(tc);
202
creatDDL(tc);
203
204
205
}
206
private void creatCount(TableCell tc)
207
{
208
209
lbtag.Text=" 每页显示记录数";
210
tb.Text=this.PageSize.ToString();
211
tb.Width=20;
212
bt.Text="提交";
213
bt.Click+=new EventHandler(bt_Click);
214
tc.Controls.Add(lbtag);
215
tc.Controls.Add(tb);
216
tc.Controls.Add(bt);
217
//
218
219
}
220
221
private void creatPageCount(TableCell tc)
222
{
223
Label lb=new Label();
224
lb.Text="<P align=\"right\"> 共"+this.PageCount+"页 第"+(this.CurrentPageIndex+1)+"页 ";
225
tc.Controls.Add(lb);
226
227
}
228
229
private void creatSPage(TableCell tc)
230
{
231
PrevPAGE.Text="上一页";
232
NextPAGE.Text="下一页";
233
PrevPAGE.CommandName="PrevPAGE";
234
NextPAGE.CommandName="NextPAGE";
235
tc.Controls.Add(PrevPAGE);
236
tc.Controls.Add(NextPAGE);
237
}
238
private void creatDDL(TableCell tc)
239
{
240
241
lbend.Text="页</p>";
242
lbddls.Text=" 跳转到第";
243
ddl.AutoPostBack=true;
244
ddl.EnableViewState=true;
245
if (!this.Page.IsPostBack)
246
{
247
ddl.Items.Clear();
248
initDDL();
249
}
250
ddl.SelectedIndexChanged+=new EventHandler(ddl_SelectedIndexChanged);
251
tc.Controls.Add(lbddls);
252
tc.Controls.Add(ddl);
253
tc.Controls.Add(lbend);
254
}
255
private void initDDL()
256
{
257
int count=this.PageCount;
258
259
for (int i=1;i<=count;i++)
260
{
261
ddl.Items.Add(i.ToString());
262
263
}
264
}
265
#endregion
266
#region InitEvent
267
private void bt_Click(object sender, EventArgs e)
268
{
269
this.PageSize=Convert.ToInt32(tb.Text);
270
ddl.Items.Clear();
271
initDDL();
this.CurrentPageIndex=0;
272
BindGrid();
273
}
274
private void PrevPAGE_Click(object sender, EventArgs e)
275
{
276
int con=this.CurrentPageIndex;
277
if (this.CurrentPageIndex-1<0)
278
{
279
280
281
}
282
else
283
{
284
this.CurrentPageIndex=con-1;
285
}
286
ddl.SelectedValue=(this.CurrentPageIndex+1).ToString();
287
BindGrid();
288
289
}
290
private void NextPAGE_Click(object sender, EventArgs e)
291
{
292
int con=this.CurrentPageIndex;
293
if (this.CurrentPageIndex>=this.PageCount-1)
294
{
295
296
}
297
else
298
{
299
this.CurrentPageIndex=con+1;
300
}
301
ddl.SelectedValue=(this.CurrentPageIndex+1).ToString();
302
BindGrid();
303
304
}
305
private void ddl_SelectedIndexChanged(object sender, EventArgs e)
306
{
307
int curri=Convert.ToInt16(ddl.SelectedValue) - 1;
308
this.CurrentPageIndex=curri;
309
BindGrid();
310
}
311
312
#endregion
313
#region GridFunction
314
private void BindGrid()
315
{
316
this.DataSource=(DataView)Page.Session[sessionName];
317
this.DataBind();
318
319
}
320
#endregion
321
322
323
}
324
}
325

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

209

210

211

212

213

214

215

216

217

218

219

220

221

222

223

224

225

226

227

228

229

230

231

232

233

234

235

236

237

238

239

240

241

242

243

244

245

246

247

248

249

250

251

252

253

254

255

256

257

258

259

260

261

262

263

264

265

266

267

268

269

270

271

this.CurrentPageIndex=0;
272

273

274

275

276

277

278

279

280

281

282

283

284

285

286

287

288

289

290

291

292

293

294

295

296

297

298

299

300

301

302

303

304

305

306

307

308

309

310

311

312

313

314

315

316

317

318

319

320

321

322

323

324

325
