GridView自訂排序
出自ProgWiki
參照
- GridView的GridView1_Sorting事件中,可以取得並改變按下的LinkButton的文字嗎?
- 使用ADO.NET動態設定GridView資料的排序範例
- ClassSQL
- SafeSQL.cs
程式碼範例
檔案index.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="index.aspx.cs" Inherits="Module_WorkFlow_Default" %> <%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="cc1" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" > <head runat="server"> <!-- #Include virtual="/include/head.inc" --> <title>未命名頁面</title> </head> <body> <form id="form1" runat="server"> <div> <cc1:ToolkitScriptManager ID="ToolkitScriptManager1" runat="server" EnableScriptGlobalization="True" EnableScriptLocalization="True"> </cc1:ToolkitScriptManager> <table border="0" width="100%"> <tr> <td align="left"><asp:Button ID="Button1" runat="server" OnClick="ButtonNewDoc_Click" Text="建立新的簽呈" /></td> <td align="right"> <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox> <asp:Button ID="Button2" runat="server" Text="搜尋" OnClick="ButtonFind_Click" /> <asp:Button ID="Button3" runat="server" Text="所有" OnClick="ButtonAll_Click" /></td> </tr> </table> <br /> <br /> <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" Font-Size="9pt" Width="100%" OnRowDataBound="GridView1_RowDataBound" OnPageIndexChanging="GridView1_PageIndexChanging" AllowPaging="True" AllowSorting="True" OnSorting="GridView1_Sorting"> <Columns> <asp:BoundField DataField="No" HeaderText="簽呈單號" SortExpression="No" > <headerstyle width="80px" /> </asp:BoundField> <asp:BoundField DataField="Title" HeaderText="主旨" SortExpression="Title" /> <asp:BoundField DataField="CompanyName" HeaderText="發文公司" SortExpression="CompanyName" > <headerstyle width="120px" /> </asp:BoundField> <asp:BoundField DataField="DepName" HeaderText="發文單位" SortExpression="DepName" > <headerstyle width="90px" /> </asp:BoundField> <asp:BoundField DataField="Name" HeaderText="發文者" SortExpression="Name" > <headerstyle width="80px" /> </asp:BoundField> <asp:BoundField DataField="LvSpeedStr" HeaderText="時限等級" SortExpression="LvSpeedStr" > <headerstyle width="30px" /> </asp:BoundField> <asp:BoundField DataField="StatusStr" HeaderText="簽呈狀態" SortExpression="StatusStr" > <headerstyle width="60px" /> </asp:BoundField> <asp:BoundField DataField="CreateTime" DataFormatString="{0:yyyy/MM/dd}" HeaderText="簽呈日期" SortExpression="CreateTime" > <headerstyle width="60px" /> </asp:BoundField> <asp:BoundField DataField="UpdateTime" DataFormatString="{0:yyyy/MM/dd HH:mm:ss}" HeaderText="最後異動時間" SortExpression="UpdateTime" > <headerstyle width="90px" /> </asp:BoundField> </Columns> <EmptyDataTemplate> </EmptyDataTemplate> </asp:GridView> </div> </form> </body> </html>
檔案index.aspx.cs
using System; using System.Data; using System.Configuration; using System.Collections; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; using System.Text; using System.Data.SqlClient; public partial class Module_WorkFlow_Default : Page { protected void Page_Load(object sender, EventArgs e) { /* 簡化程序顯示, 原帳號登入驗證流程省略 */ if (!IsPostBack) { GridView1_DataBinding(); } } protected void ButtonNewDoc_Click(object sender, EventArgs e) { string strUrl = "DocEdit.aspx?No="; this.Response.Redirect(strUrl); } protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) { if (e.Row.RowIndex != -1) { for (int i = 0; i < e.Row.Cells.Count; i++) { e.Row.Cells[i].Attributes["onclick"] = string.Format( "javascript:location.href='DocEdit.aspx?No={0}';return false;", e.Row.Cells[0].Text); //style="cursor:hand" 在FireFox下不可用,應改為 style="cursor:pointer" e.Row.Cells[i].Style["cursor"] = "pointer"; } //自動變色機制 if (e.Row.RowIndex % 2 == 1) { //單數資料列 e.Row.Style.Add(HtmlTextWriterStyle.BackgroundColor, "#FFFFFF"); e.Row.Attributes.Add("onmouseout", "onmouseChangeRowColor(this,true,false);"); e.Row.Attributes.Add("onmouseover", "onmouseChangeRowColor(this,true,true);"); } else { //雙數資料列 e.Row.Style.Add(HtmlTextWriterStyle.BackgroundColor, "#EFF3FB"); e.Row.Attributes.Add("onmouseout", "onmouseChangeRowColor(this,false,false);"); e.Row.Attributes.Add("onmouseover", "onmouseChangeRowColor(this,false,true);"); } } } protected void GridView1_DataBinding() { DateTime firstDate = DateTime.Today.AddMonths(-1); DateTime lastDate = DateTime.Today.AddDays(+1); ClassSQL objSql = new ClassSQL(); using (SqlConnection conn = objSql.OpenConnection()) { /* 簡化 select 使用SQL預存程序 */ string strSql = string.Format( "exec [dbo].[sp_getDocList2] {0},{1},{2},{3}", Session["UserID"].ToString(), SafeSQL.Quote(firstDate.ToString("yyyy/MM/dd")), SafeSQL.Quote(lastDate.ToString("yyyy/MM/dd")), SafeSQL.Quote(TextBox1.Text)); using (DataSet ds = objSql.ExecuteDataSet(conn, strSql)) { if ((ViewState["SortDirection"] == null) || (ViewState["SortField"] == null)) { GridView1.DataSource = ds; GridView1.DataBind(); } else { using (DataView dv = ds.Tables[0].DefaultView) { string strSort = ViewState["SortField"].ToString(); if (ViewState["SortDirection"].ToString() == SortDirection.Descending.ToString()) strSort += " DESC"; dv.Sort = strSort; GridView1.DataSource = dv; GridView1.DataBind(); } } } } } protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e) { this.GridView1.PageIndex = e.NewPageIndex; GridView1_DataBinding(); } protected void ButtonFind_Click(object sender, EventArgs e) { TextBox1.Text = TextBox1.Text.Trim(); GridView1_DataBinding(); } protected void ButtonAll_Click(object sender, EventArgs e) { TextBox1.Text = ""; GridView1_DataBinding(); } protected void GridView1_Sorting(object sender, GridViewSortEventArgs e) { //以下的code出自 // http://social.msdn.microsoft.com/Forums/zh-TW/236/thread/932a0f2b-f777-4621-950a-6ed3d7c39139 if (ViewState["SortDirection"] == null) { ViewState["SortDirection"] = SortDirection.Descending; } for (int i = 0; i <= ((GridView)sender).Columns.Count - 1; i++) { ((GridView)sender).Columns[i].HeaderText = ((GridView)sender).Columns[i].HeaderText.Replace("▲", ""); ((GridView)sender).Columns[i].HeaderText = ((GridView)sender).Columns[i].HeaderText.Replace("▼", ""); } string ViewState_SortDirection = ViewState["SortDirection"].ToString(); int Columns_i =0; for (int i = 0; i <= ((GridView)sender).Columns.Count - 1; i++) { if (e.SortExpression == ((GridView)sender).Columns[i].SortExpression) { Columns_i = i; if (ViewState["SortDirection"].ToString() == SortDirection.Ascending.ToString()) { e.SortDirection = SortDirection.Descending; ((GridView)sender).Columns[i].HeaderText = ((GridView)sender).Columns[i].HeaderText + "▼"; ViewState["SortDirection"] = SortDirection.Descending; } else { e.SortDirection = SortDirection.Ascending; ((GridView)sender).Columns[i].HeaderText = ((GridView)sender).Columns[i].HeaderText + "▲"; ViewState["SortDirection"] = SortDirection.Ascending; } } } //補上必要的code ViewState["SortField"] = e.SortExpression; GridView1_DataBinding(); } }