因为项目需要,要弄个有这样功能的控件。要有自定意分页和排序的功能。在这个控件里面数据的绑定都是用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:[email protected]
12
/// msn:[email protected]
13
/// </summary>
14
[DefaultProperty("Text"),
15
ToolboxData("<{0}:LcDataGrid runat=server></{0}:LcDataGrid>")]
16
public class LcDataGrid : System.Web.UI.WebControls.DataGrid
17
{
18
Define#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
displayPortery#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
Property#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
InitDataGird#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
InitEvent#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
GridFunction#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