在DataGrid中,我們可以實作類別似Windows資源管理員的效果,即對列進行排序,該列顏色與其它列不同。下面就是實現的代碼:
C#代碼:
DataGridLikeWindowsExplorer.aspx
<meta name="GENERATOR" content="Microsoft Visual Studio 7.0"><meta name="CODE_LANGUAGE" content="C#"><meta name="vs_defaultClientScript" content="JavaScript"><meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5"><br /><style type="text/css"> .gridtooltip { BORDER-RIGHT: black 1px solid; PADDING-RIGHT: 4px; BORDER-TOP: black 1px solid; PADDING-LEFT: 4px; Z-INDEX: 200; LEFT: 0px; VISIBILITY: hidden; PADDING-BOTTOM: 4px; FONT: 9pt bold 宋體; BORDER-LEFT: black 1px solid; WIDTH: 150px; COLOR: white; PADDING-TOP: 4px; BORDER-BOTTOM: black 1px solid; POSITION: absolute; TOP: 0px; BACKGROUND-COLOR: #ff3316 } </style><p><placeholder id="Tips_PlaceHolder" runat="server"></placeholder>
DataGridLikeWindowsExplorer.aspx.cs
using System; using System.Collections; using System.ComponentModel; using System.Data; using System.Data.SqlClient; using System.Drawing; using System.Web; using System.Web.Caching; using System.Web.SessionState; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.HtmlControls; namespace aspxWebCS { ///<br /><summary> /// DataGridLikeWindowsExplorer 的摘要說明。 /// </summary><p> public class DataGridLikeWindowsExplorer : System.Web.UI.Page { protected System.Web.UI.WebControls.DataGrid WinExplorerView_DataGrid; protected System.Data.SqlClient.SqlDataAdapter m_sqlDataAdapter; protected System.Data.SqlClient.SqlCommand m_sqlSelectCommand; protected System.Data.SqlClient.SqlConnection m_sqlConnection; protected System.Data.DataSet m_dsEmployees; protected System.Data.DataView m_dvEmployees; protected System.Collections.Hashtable colHeaderMap; protected string m_strSortExpr; protected string m_strSortOrder; protected int m_iSortColumnIdx; protected System.Web.UI.WebControls.PlaceHolder Tips_PlaceHolder; protected string strConn = "Data Source=.;User Id=sa;Password=;Initial Catalog=Northwind;"; private void Page_Load(object sender, System.EventArgs e) { m_iSortColumnIdx = -1; m_strSortExpr = ""; m_strSortOrder = ""; ProcessViewState(); PrepareColumnHeaderMap(); if (!IsPostBack) { BindGridToView(); } } private void PrepareColumnHeaderMap() { colHeaderMap = new Hashtable(); int idx = 0; foreach (DataGridColumn col in WinExplorerView_DataGrid.Columns) { colHeaderMap[col.SortExpression] = idx++; } } private void RetrieveData() { if (null == Cache["EmployeesDS"]) { string tmp = "SELECT LastName, FirstName, Title, BirthDate, City FROM Employees"; m_sqlConnection = new SqlConnection(strConn); m_sqlSelectCommand = new SqlCommand(tmp, m_sqlConnection); m_sqlDataAdapter = new SqlDataAdapter(m_sqlSelectCommand); m_dsEmployees = new DataSet("Employees"); m_sqlDataAdapter.Fill(m_dsEmployees); Cache.Insert("EmployeesDS", m_dsEmployees, null, DateTime.Now.AddMinutes(1), Cache.NoSlidingExpiration); } else { m_dsEmployees = (DataSet)Cache["EmployeesDS"]; } } private void ProcessViewState() { if (null != ViewState["SortExpr"]) { m_strSortExpr = ViewState["SortExpr"].ToString(); } if (null != ViewState["SortOrder"]) { m_strSortOrder = ViewState["SortOrder"].ToString(); } } private void BindGridToView() { string strSort = ""; if (0 != m_strSortExpr.Length) { strSort = m_strSortExpr; if (0 != m_strSortOrder.Length) { strSort += (" " + m_strSortOrder); } } RetrieveData(); m_dvEmployees = new DataView(m_dsEmployees.Tables[0], "", strSort, DataViewRowState.CurrentRows); WinExplorerView_DataGrid.DataSource = m_dvEmployees; WinExplorerView_DataGrid.DataBind(); } private Color GetSortColumnColor() { if (null == this.m_strSortOrder || String.Empty == this.m_strSortOrder|| 0 == this.m_strSortOrder.Length) { return Color.Gold; } if (m_strSortOrder.CompareTo("ASC") == 0) { return Color.Gold; } else { return Color.BlanchedAlmond; } } private void OnPageIndexChange(object source, System.Web.UI.WebControls.DataGridPageChangedEventArgs e) { WinExplorerView_DataGrid.CurrentPageIndex = e.NewPageIndex; BindGridToView(); } private void OnSortView(object source, System.Web.UI.WebControls.DataGridSortCommandEventArgs e) { m_strSortExpr = e.SortExpression; ViewState["SortExpr"] = m_strSortExpr; if (0 == m_strSortOrder.Length) { m_strSortOrder = "ASC"; } else if (m_strSortOrder.CompareTo("ASC") == 0) { m_strSortOrder = "DESC"; } else { m_strSortOrder = "ASC"; } ViewState["SortOrder"] = m_strSortOrder; // 找到Click事件所在的列序號 m_iSortColumnIdx = Convert.ToInt32(this.colHeaderMap[m_strSortExpr]); BindGridToView(); } private void OnItemCreated(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e) { if (e.Item.ItemType == ListItemType.Header) { int idx = 0; foreach (TableCell cl in e.Item.Cells) { cl.Attributes.Add("onmouseover", "showheadertip(" + idx.ToString() + ");"); cl.Attributes.Add("onmouseout", "hideheadertip(" + idx.ToString() + ");"); idx++; } } if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) { if (-1 != m_iSortColumnIdx) { e.Item.Cells[m_iSortColumnIdx].BackColor = GetSortColumnColor(); } } } protected override void OnPreRender(EventArgs e) { ///ToolTip文字 int nCount = this.WinExplorerView_DataGrid.Columns.Count; for (int i = 0; i <strong>作者Blog:</strong>http://blog.csdn.net/littlehb/