重写GridView,支持CheckBox选择,List排序等等...

重新封装了一个 GridView,支持如下功能:

1. CheckBox选择记录,指定CheckBox的位置
2. 支持List,DataSet,Datatable 排序
3. 排序时在Header部分出现图标
4. 封装了PageIndexChanged 和DataBind,不用每页都写。

2011050103591413.gif

 
  
1 using System;
2   using System.Collections.Generic;
3   using System.ComponentModel;
4 using System.Data;
5 using System.Web;
6 using System.Web.UI;
7 using System.Web.UI.WebControls;
8 using System.Reflection;
9
10 namespace xxWare.xxControls
11 {
12 [ToolboxData( " <{0}:xxGridView runat=server></{0}:xxGridView> " )]
13 public class xxGridView : System.Web.UI.WebControls.GridView
14 {
15 #region Properties
16 // sort image url : full url = Sort_Image_Url + Asc_Image_Name
17 [Browsable( true ) , Category( " Sort Image " ), DefaultValue( " images/arrow_up.gif " ) , Description( " Asc Image " )]
18 public string Asc_Image { get ; set ; }
19 [Browsable( true ), Category( " Sort Image " ), DefaultValue( " images/arrow_down.gif " ), Description( " Desc Image " )]
20 public string Desc_Image { get ; set ; }
21 [Browsable( true ), Category( " Sort Image " ), DefaultValue( " images/arrow_updn.gif " ), Description( " Sortable Image " )]
22 public string Sort_Image { get ; set ; }
23
24 // Property : SortExpression
25 [Browsable( false )]
26 public string CurrentSortExpression
27 {
28 get { return Convert.ToString(ViewState[ " CurrentSortExpression " ]); }
29 set { ViewState[ " CurrentSortExpression " ] = value.Trim(); }
30 }
31 [Browsable( false )]
32 public string CurrentSortDirection
33 {
34 get { return Convert.ToString(ViewState[ " CurrentSortDirection " ]); }
35 set
36 {
37 if ( string .IsNullOrEmpty(value))
38 {
39 ViewState[ " CurrentSortDirection " ] = " desc " ;
40 }
41 else
42 {
43 if (value.ToLower() != " asc " && value.ToLower() != " desc " )
44 {
45 ViewState[ " CurrentSortDirection " ] = " desc " ;
46 }
47 else
48 {
49 ViewState[ " CurrentSortDirection " ] = value.ToString().ToLower();
50 }
51 }
52 }
53 }
54
55 // Property : Multi Show CheckBox
56 [Category( " MultiSelect " ) , DefaultValue( " True " )]
57 public bool AllowMultiSelect
58 {
59 get { return bool .Parse(ViewState[ " AllowMultiSelect " ].ToString()); }
60 set { ViewState[ " AllowMultiSelect " ] = value.ToString(); }
61 }
62 [Category( " MultiSelect " ), DefaultValue( 0 )]
63 public int AllowMultiSelectColumn
64 {
65 get { return Int32.Parse(ViewState[ " AllowMultiSelectColumn " ].ToString()); }
66 set { ViewState[ " AllowMultiSelectColumn " ] = value.ToString(); }
67 }
68 /*
69 public string RowSelectFilter
70 {
71 get { return (string)ViewState["RowSelectFilter"]; }
72 set { ViewState["RowSelectFilter"] = value.ToString(); }
73 }
74 * */
75 // Property : Get Selected Items
76 [Browsable( false )]
77 public List < GridViewRow > MultiSelectedItem
78 {
79 get
80 {
81 if ( ! AllowMultiSelect) return null ;
82
83 List < GridViewRow > selectedRows = new List < GridViewRow > ();
84 foreach (GridViewRow row in this .Rows)
85 {
86 CheckBox cb = (CheckBox)row.Cells[AllowMultiSelectColumn].Controls[ 0 ];
87 if (cb.Checked)
88 {
89 selectedRows.Add(row);
90 }
91 }
92
93 return selectedRows;
94 }
95 }
96
97 // Define DataSource
98 private object sourcedata;
99 public object DataSetSource
100 {
101 get
102 {
103 if (sourcedata != null )
104 return sourcedata;
105 else
106 return null ;
107 }
108 set
109 {
110 sourcedata = value as object ;
111 }
112 }
113
114 #endregion
115
116 private ClientScriptManager csManager;
117
118 public xxGridView() : base ()
119 {
120 AllowPaging = false ;
121 AllowSorting = true ;
122 // GridLines = GridLines.Horizontal;
123 // BorderWidth = (Unit)0;
124
125 // Sort Images Default
126 Asc_Image = @" images/arrow_up.gif " ;
127 Desc_Image = @" images/arrow_down.gif " ;
128 Sort_Image = @" images/arrow_updn.gif " ;
129
130 // set event handlers
131 Init += new EventHandler(On_Init);
132 Sorting += new GridViewSortEventHandler(On_Sorting);
133 RowCreated += new GridViewRowEventHandler(On_RowCreated);
134 }
135
136 #region Event Handlers
137 public event EventHandler GridBindEvent;
138 public virtual void OnGridBind < T > ()
139 {
140 if (sourcedata != null )
141 {
142 if (CurrentSortExpression == string .Empty)
143 {
144 this .DataSource = sourcedata;
145 this .DataBind();
146 return ;
147 }
148
149 // Datasource Type
150 if (sourcedata is DataTable)
151 {
152 DataView dv = (sourcedata as DataTable).DefaultView;
153 if ( ! string .IsNullOrEmpty(CurrentSortExpression))
154 dv.Sort = CurrentSortExpression + " " + CurrentSortDirection;
155
156 this .DataSource = dv;
157 this .DataBind();
158 }
159 else if (sourcedata is DataSet)
160 {
161 DataView dv = (sourcedata as DataSet).Tables[ 0 ].DefaultView;
162 if ( ! string .IsNullOrEmpty(CurrentSortExpression))
163 dv.Sort = CurrentSortExpression + " " + CurrentSortDirection;
164
165 this .DataSource = dv;
166 this .DataBind();
167 }
168 else if (sourcedata is List < T > )
169 {
170 if ( ! string .IsNullOrEmpty(CurrentSortExpression))
171 {
172 Reverser < T > reverser = new Reverser < T > ( typeof (T), CurrentSortExpression, CurrentSortDirection);
173 (sourcedata as List < T > ).Sort(reverser);
174 }
175
176 this .DataSource = sourcedata;
177 this .DataBind();
178 }
179 }
180
181 }
182
183 public void On_Init( object sender, EventArgs e)
184 {
185 // processing multi-select
186 if (ViewState[ " AllowMultiSelect " ] == null || ViewState[ " AllowMultiSelect " ].ToString().Trim() == "" )
187 ViewState[ " AllowMultiSelect " ] = " True " ;
188 if (ViewState[ " AllowMultiSelectColumn " ] == null || ViewState[ " AllowMultiSelectColumn " ].ToString().Trim() == "" )
189 ViewState[ " AllowMultiSelectColumn " ] = " 0 " ;
190
191 csManager = this .Page.ClientScript;
192 if (AllowMultiSelect)
193 {
194 AddSelectColumn();
195 RegisterJS();
196 }
197
198 // processing sorting...
199 if (CurrentSortDirection == null || CurrentSortDirection.Trim() == "" )
200 CurrentSortDirection = " desc " ;
201 if (CurrentSortExpression == null ) CurrentSortDirection = "" ;
202 }
203
204 public void On_Sorting( object sender , GridViewSortEventArgs e)
205 {
206 CurrentSortExpression = e.SortExpression;
207 if (CurrentSortDirection == " desc " )
208 CurrentSortDirection = " asc " ;
209 else
210 CurrentSortDirection = " desc " ;
211
212 GridBindEvent( this , EventArgs.Empty);
213 }
214
215 public void On_RowCreated( object sender , GridViewRowEventArgs e)
216 {
217 string currentSortImage = "" ;
218 if (e.Row.RowType == DataControlRowType.Header)
219 {
220 foreach (DataControlField field in this .Columns)
221 {
222 if ( ! String.IsNullOrEmpty(field.SortExpression))
223 {
224 if (IsSortedByThisField(field.SortExpression))
225 {
226 currentSortImage = (CurrentSortDirection == " asc " ) ? Asc_Image : Desc_Image;
227 }
228 else
229 {
230 currentSortImage = Sort_Image;
231 }
232 AddSortImage(e.Row, this .Columns.IndexOf(field), currentSortImage);
233 }
234 }
235 }
236 }
237
238 #endregion
239
240 #region Override Methods
241 protected override void OnPageIndexChanging(GridViewPageEventArgs e)
242 {
243 // base.OnPageIndexChanging(e);
244 this .PageIndex = e.NewPageIndex;
245 GridBindEvent( this , EventArgs.Empty);
246 }
247 #endregion
248
249 #region private helper function
250 // For Sort
251 private void AddSortImage(GridViewRow _row, int _colIndex , string _currImage)
252 {
253 if ( - 1 == _colIndex) return ;
254
255 Image sortImage = new Image();
256 sortImage.ImageUrl = _currImage;
257 _row.Cells[_colIndex].Controls.AddAt( 1 , sortImage);
258 }
259
260 private bool IsSortedByThisField(String strSortExpression)
261 {
262 return CurrentSortExpression.ToLower() == strSortExpression.Trim().ToLower();
263 }
264
265 // for Multi Select
266 private void AddSelectColumn()
267 {
268 TemplateField tc = new TemplateField();
269 tc.ItemTemplate = new FarGridColumnTemplate();
270 tc.HeaderTemplate = new FarGridHeaderTemplate();
271
272 this .Columns.Insert(AllowMultiSelectColumn, tc);
273 }
274 private void RegisterJS()
275 {
276 /*
277 System.Resources.ResourceManager rm = new System.Resources.ResourceManager("xxGridView", Assembly.GetExecutingAssembly());
278 string _script = rm.GetString("js_selectall");
279
280 if (!csManager.IsClientScriptBlockRegistered(this.GetType() , "js_selectall"))
281 {
282 csManager.RegisterClientScriptBlock(this.GetType(), "js_selectall", _script);
283 }
284 */
285
286 csManager.RegisterClientScriptResource( this .GetType(), " xxWare.xxControls.xxGridViewJS.js " );
287 }
288
289 #endregion
290
291 }
292 }

还有一些如: MultiSelectFilter 等有时间再完善

转载于:https://www.cnblogs.com/jdxx/archive/2011/05/01/GridView.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值