GridView排序加上下箭头(2)
GridView排序加上下箭头
上面的方法很不爽,自己从新做了一个,在我以前的代码基础之上修改的.这种方法才是我要的真正效果.
特公布代码如下:
前端页面代码没变,CS代码.
1using System;
2using System.Data;
3using System.Configuration;
4using System.Collections;
5using System.Web;
6using System.Web.Security;
7using System.Web.UI;
8using System.Web.UI.WebControls;
9using System.Web.UI.WebControls.WebParts;
10using System.Web.UI.HtmlControls;
11
12
13public partial class ComEmployee : System.Web.UI.Page
14{
15 protected void Page_Load(object sender, EventArgs e)
16 {
17 if (!IsPostBack)
18 {
19 this.txtDate.Text = DateTime.Now.ToString("MM/dd/yyyy");
20 this.btnGetEmp.Attributes["onclick"] = "changeStatus();";
21 GridViewBind();
22 }
23 }
24 private void GridViewBind()
25 {
26 //監測當前的排序狀況
27 if (this.ViewState["orderByName"] == null)
28 {
29 ViewState["orderByName"] = "g_time";
30 ViewState["orderByType"] = "asc";
31 }
32
33 //獲取當前ViewState中保存的排序
34 string orderByName = this.ViewState["orderByName"].ToString();
35 string orderByType = this.ViewState["orderByType"].ToString();
36 WebClass.NewEmpClass tmp = new WebClass.NewEmpClass();
37 DataTable dt = tmp.ComEmployyeeList();
38 DataView dv = dt.DefaultView;
39 dv.Sort = orderByName+" "+ orderByType;
40 myGridView.DataSource = dv;
41 myGridView.DataBind();
42 labRecordCount.Text = "共<font color='red'>" + dt.Rows.Count.ToString() + "</font>筆記錄";
43 labPageCount.Text = "頁次<font color='blue'>" + (myGridView.PageIndex + 1).ToString() + "</font>/<font color='red'>" + myGridView.PageCount.ToString() + "</font>頁";
44 labPageRecord.Text = "<font color='red'>" + myGridView.PageSize.ToString() + "</font>筆記錄/頁";
45
46 if (dt.Rows.Count == 0)
47 {
48 btnFirst.Visible = false;
49 btnPrev.Visible = false;
50 btnNext.Visible = false;
51 btnLast.Visible = false;
52
53 labRecordCount.Visible = false;
54 labPageCount.Visible = false;
55 labPageRecord.Visible = false;
56 }
57 else if (myGridView.PageCount == 1)
58 {
59 btnFirst.Visible = false;
60 btnPrev.Visible = false;
61 btnNext.Visible = false;
62 btnLast.Visible = false;
63 }
64
65 btnFirst.CommandName = "1";
66 btnPrev.CommandName = (myGridView.PageIndex == 0 ? "1" : myGridView.PageIndex.ToString());
67 btnNext.CommandName = (myGridView.PageCount == 1 ? myGridView.PageCount.ToString() : (myGridView.PageIndex + 2).ToString());
68 btnLast.CommandName = myGridView.PageCount.ToString();
69 BtnValidate();
70 }
71 private void BtnValidate()
72 {
73 if (myGridView.PageIndex + 1 >= myGridView.PageCount)
74 {
75 btnNext.Enabled = false;
76 btnLast.Enabled = false;
77 }
78 else
79 {
80 btnNext.Enabled = true;
81 btnLast.Enabled = true;
82 }
83 if (myGridView.PageIndex + 1 <= 1)
84 {
85 btnPrev.Enabled = false;
86 btnFirst.Enabled = false;
87 }
88 else
89 {
90 btnPrev.Enabled = true;
91 btnFirst.Enabled = true;
92 }
93 }
94 protected void PagerButtonClick(object sender, EventArgs e)
95 {
96 myGridView.PageIndex = Convert.ToInt32(((LinkButton)sender).CommandName) - 1;
97 GridViewBind();
98 }
99 protected void myGridView_PageIndexChanging(object sender, GridViewPageEventArgs e)
100 {
101 myGridView.PageIndex = e.NewPageIndex;
102 GridViewBind();
103 }
104 protected void myGridView_RowDataBound(object sender, GridViewRowEventArgs e)
105 {
106 if (e.Row.RowIndex != -1)
107 {
108 int orderID = this.myGridView.PageIndex * this.myGridView.PageSize + e.Row.RowIndex + 1;
109 e.Row.Cells[0].Text = orderID.ToString();
110 }
111 }
112 protected void myGridView_Sorting(object sender, GridViewSortEventArgs e)
113 {
114 this.setViewState(e.SortExpression, this.ViewState["orderByType"].ToString() == "asc" ? "desc" : "asc");
115 GridViewBind();
116 }
117 /**//// <summary>
118 /// 以ViewState控制排序,寫入排序字段名及排序方式
119 /// </summary>
120 private void setViewState(string orderByName, string orderByType)
121 {
122 ViewState["orderByName"] = orderByName;
123 ViewState["orderByType"] = orderByType;
124 }
125
126 private string SortExpression
127 {
128 get
129 {
130 if (ViewState["orderByName"] != null && ViewState["orderByName"].ToString() != string.Empty)
131 {
132 return ViewState["orderByName"].ToString();
133 }
134 else
135 {
136 return "";
137 }
138 }
139 set
140 {
141 ViewState["orderByName"] = value;
142 }
143 }
144 private string sort
145 {
146 get
147 {
148 if (ViewState["orderByType"] != null && ViewState["orderByType"].ToString() != string.Empty)
149 {
150 return ViewState["orderByType"].ToString();
151 }
152 else
153 {
154 return "";
155 }
156 }
157 set
158 {
159 ViewState["orderByType"] = value;
160 }
161 }
162 protected void imgbtnUpdate_Click(object sender, ImageClickEventArgs e)
163 {
164 GridViewBind();
165 }
166 protected void btnGetEmp_Click(object sender, EventArgs e)
167 {
168 string strEmpno = Request.Form.Get("chkID");
169 WebClass.NewEmpClass tmp = new WebClass.NewEmpClass();
170 tmp.CheckNewEmployyee(strEmpno);
171 }
172 protected void myGridView_RowCreated(object sender, GridViewRowEventArgs e)
173 {
174 for (int i = 0; i < myGridView.Columns.Count; i++)
175 {
176 //if (i == 0) continue;
177 if (e.Row.RowIndex == -1)
178 {
179 if (myGridView.Columns[i].SortExpression == SortExpression)
180 {
181 try
182 {
183 TableCell tableCell = e.Row.Cells[i];
184 Label lblSorted = new Label();
185 lblSorted.Font.Name = "webdings";
186 lblSorted.Width = 20;
187 lblSorted.Text = (sort == "asc" ? "6" : "5");
188 tableCell.Controls.Add(lblSorted);
189 }
190 catch { }
191 }
192 }
193 }
194
195 }
196}
197
上面的方法很不爽,自己从新做了一个,在我以前的代码基础之上修改的.这种方法才是我要的真正效果.
特公布代码如下:
前端页面代码没变,CS代码.
1using System;
2using System.Data;
3using System.Configuration;
4using System.Collections;
5using System.Web;
6using System.Web.Security;
7using System.Web.UI;
8using System.Web.UI.WebControls;
9using System.Web.UI.WebControls.WebParts;
10using System.Web.UI.HtmlControls;
11
12
13public partial class ComEmployee : System.Web.UI.Page
14{
15 protected void Page_Load(object sender, EventArgs e)
16 {
17 if (!IsPostBack)
18 {
19 this.txtDate.Text = DateTime.Now.ToString("MM/dd/yyyy");
20 this.btnGetEmp.Attributes["onclick"] = "changeStatus();";
21 GridViewBind();
22 }
23 }
24 private void GridViewBind()
25 {
26 //監測當前的排序狀況
27 if (this.ViewState["orderByName"] == null)
28 {
29 ViewState["orderByName"] = "g_time";
30 ViewState["orderByType"] = "asc";
31 }
32
33 //獲取當前ViewState中保存的排序
34 string orderByName = this.ViewState["orderByName"].ToString();
35 string orderByType = this.ViewState["orderByType"].ToString();
36 WebClass.NewEmpClass tmp = new WebClass.NewEmpClass();
37 DataTable dt = tmp.ComEmployyeeList();
38 DataView dv = dt.DefaultView;
39 dv.Sort = orderByName+" "+ orderByType;
40 myGridView.DataSource = dv;
41 myGridView.DataBind();
42 labRecordCount.Text = "共<font color='red'>" + dt.Rows.Count.ToString() + "</font>筆記錄";
43 labPageCount.Text = "頁次<font color='blue'>" + (myGridView.PageIndex + 1).ToString() + "</font>/<font color='red'>" + myGridView.PageCount.ToString() + "</font>頁";
44 labPageRecord.Text = "<font color='red'>" + myGridView.PageSize.ToString() + "</font>筆記錄/頁";
45
46 if (dt.Rows.Count == 0)
47 {
48 btnFirst.Visible = false;
49 btnPrev.Visible = false;
50 btnNext.Visible = false;
51 btnLast.Visible = false;
52
53 labRecordCount.Visible = false;
54 labPageCount.Visible = false;
55 labPageRecord.Visible = false;
56 }
57 else if (myGridView.PageCount == 1)
58 {
59 btnFirst.Visible = false;
60 btnPrev.Visible = false;
61 btnNext.Visible = false;
62 btnLast.Visible = false;
63 }
64
65 btnFirst.CommandName = "1";
66 btnPrev.CommandName = (myGridView.PageIndex == 0 ? "1" : myGridView.PageIndex.ToString());
67 btnNext.CommandName = (myGridView.PageCount == 1 ? myGridView.PageCount.ToString() : (myGridView.PageIndex + 2).ToString());
68 btnLast.CommandName = myGridView.PageCount.ToString();
69 BtnValidate();
70 }
71 private void BtnValidate()
72 {
73 if (myGridView.PageIndex + 1 >= myGridView.PageCount)
74 {
75 btnNext.Enabled = false;
76 btnLast.Enabled = false;
77 }
78 else
79 {
80 btnNext.Enabled = true;
81 btnLast.Enabled = true;
82 }
83 if (myGridView.PageIndex + 1 <= 1)
84 {
85 btnPrev.Enabled = false;
86 btnFirst.Enabled = false;
87 }
88 else
89 {
90 btnPrev.Enabled = true;
91 btnFirst.Enabled = true;
92 }
93 }
94 protected void PagerButtonClick(object sender, EventArgs e)
95 {
96 myGridView.PageIndex = Convert.ToInt32(((LinkButton)sender).CommandName) - 1;
97 GridViewBind();
98 }
99 protected void myGridView_PageIndexChanging(object sender, GridViewPageEventArgs e)
100 {
101 myGridView.PageIndex = e.NewPageIndex;
102 GridViewBind();
103 }
104 protected void myGridView_RowDataBound(object sender, GridViewRowEventArgs e)
105 {
106 if (e.Row.RowIndex != -1)
107 {
108 int orderID = this.myGridView.PageIndex * this.myGridView.PageSize + e.Row.RowIndex + 1;
109 e.Row.Cells[0].Text = orderID.ToString();
110 }
111 }
112 protected void myGridView_Sorting(object sender, GridViewSortEventArgs e)
113 {
114 this.setViewState(e.SortExpression, this.ViewState["orderByType"].ToString() == "asc" ? "desc" : "asc");
115 GridViewBind();
116 }
117 /**//// <summary>
118 /// 以ViewState控制排序,寫入排序字段名及排序方式
119 /// </summary>
120 private void setViewState(string orderByName, string orderByType)
121 {
122 ViewState["orderByName"] = orderByName;
123 ViewState["orderByType"] = orderByType;
124 }
125
126 private string SortExpression
127 {
128 get
129 {
130 if (ViewState["orderByName"] != null && ViewState["orderByName"].ToString() != string.Empty)
131 {
132 return ViewState["orderByName"].ToString();
133 }
134 else
135 {
136 return "";
137 }
138 }
139 set
140 {
141 ViewState["orderByName"] = value;
142 }
143 }
144 private string sort
145 {
146 get
147 {
148 if (ViewState["orderByType"] != null && ViewState["orderByType"].ToString() != string.Empty)
149 {
150 return ViewState["orderByType"].ToString();
151 }
152 else
153 {
154 return "";
155 }
156 }
157 set
158 {
159 ViewState["orderByType"] = value;
160 }
161 }
162 protected void imgbtnUpdate_Click(object sender, ImageClickEventArgs e)
163 {
164 GridViewBind();
165 }
166 protected void btnGetEmp_Click(object sender, EventArgs e)
167 {
168 string strEmpno = Request.Form.Get("chkID");
169 WebClass.NewEmpClass tmp = new WebClass.NewEmpClass();
170 tmp.CheckNewEmployyee(strEmpno);
171 }
172 protected void myGridView_RowCreated(object sender, GridViewRowEventArgs e)
173 {
174 for (int i = 0; i < myGridView.Columns.Count; i++)
175 {
176 //if (i == 0) continue;
177 if (e.Row.RowIndex == -1)
178 {
179 if (myGridView.Columns[i].SortExpression == SortExpression)
180 {
181 try
182 {
183 TableCell tableCell = e.Row.Cells[i];
184 Label lblSorted = new Label();
185 lblSorted.Font.Name = "webdings";
186 lblSorted.Width = 20;
187 lblSorted.Text = (sort == "asc" ? "6" : "5");
188 tableCell.Controls.Add(lblSorted);
189 }
190 catch { }
191 }
192 }
193 }
194
195 }
196}
197
在实现这种方法时有一些感触,分享如下:
1.GridGriew中的DataView.sort属性排序时可以保存状态,DataGrid就不行,只能对当前页进行排序,所以每次实现这种功能时都把参数传到数据层.很郁闷.
2.忘記了,剛才還記得,哎記憶力不好了,想起來了再寫,要幹活了。
3.orderByName和orderByType之間要加空格
eg: DataView dv = dt.DefaultView;
dv.Sort = orderByName+" "+ orderByType;
4.向上向下的箭頭也可以換成圖片,webdings字體應該速度更快。
效果如下: