实现类似Windows资源管理器的DataGrid

来源:互联网 发布:淘宝中国质造质量好吗 编辑:程序博客网 时间:2024/05/16 17:47

在DataGrid中,我们可以实现类似Windows资源管理器的效果,即对列进行排序,该列颜色与其它列不同。下面就是实现的代码:

C#代码:

DataGridLikeWindowsExplorer.aspx

<%@ Page language="c#" Codebehind="DataGridLikeWindowsExplorer.aspx.cs"AutoEventWireup="false" Inherits="aspxWebCS.DataGridLikeWindowsExplorer" %><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" ><HTML><HEAD><title>DataGridLikeWindowsExplorer</title><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"><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><script language="javascript" type="text/javascript">function showheadertip(idx){var tooltipif (document.getElementById)tooltip = document.getElementById('htip' + idx)elsetooltip = eval("document.all['htip" + idx + "']");if (tooltip != null){tooltip.style.pixelLeft = event.clientX + 5;tooltip.style.pixelTop = event.clientY + 5;tooltip.style.visibility = "visible";}}function hideheadertip(idx){var tooltipif (document.getElementById)tooltip = document.getElementById('htip' + idx)elsetooltip = eval("document.all['htip" + idx + "']");if (tooltip != null){tooltip.style.visibility = "hidden";}}</script></HEAD><body MS_POSITIONING="GridLayout"><asp:PlaceHolder ID="Tips_PlaceHolder" Runat="server"></asp:PlaceHolder><form id="DataGridLikeWindowsExplorer" method="post" runat="server"><div align="center"><h4>Northwind职员表</h4><asp:DataGrid ID="WinExplorerView_DataGrid" Runat="server" BorderColor="#FF6600"BorderStyle="None" BorderWidth="5px" BackColor="White" CellPadding="5" AllowSorting="True"AutoGenerateColumns="False" AllowPaging="True" GridLines="Horizontal" PageSize="5"><SelectedItemStyle Font-Bold="True" ForeColor="White" BackColor="#669999"></SelectedItemStyle><ItemStyle ForeColor="#000066"></ItemStyle><HeaderStyle Font-Bold="True" HorizontalAlign="Center" ForeColor="Navy" BackColor="#FFCC00"></HeaderStyle><FooterStyle ForeColor="#000066" BackColor="White"></FooterStyle><Columns><asp:BoundColumn DataField="LastName" SortExpression="LastName" HeaderText="姓"></asp:BoundColumn><asp:BoundColumn DataField="FirstName" SortExpression="FirstName" HeaderText="名字"></asp:BoundColumn><asp:BoundColumn DataField="Title" SortExpression="Title" HeaderText="职位"></asp:BoundColumn><asp:BoundColumn DataField="BirthDate" SortExpression="BirthDate" HeaderText="出生日期"DataFormatString="{0:d}"/></asp:BoundColumn><asp:BoundColumn DataField="City" SortExpression="City" HeaderText="居住地"></asp:BoundColumn></Columns><PagerStyle HorizontalAlign="Left" ForeColor="#000066" BackColor="White" Mode="NumericPages"></PagerStyle></asp:DataGrid></div></form></body></HTML>

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{/// <summary>/// DataGridLikeWindowsExplorer 的摘要说明。/// </summary>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 < nCount; i++){Panel pnl = new Panel();pnl.CssClass = "gridtooltip";pnl.ID = "htip" + i.ToString();Literal lt = new Literal();lt.Text = this.GetHeaderTooltipText(i);pnl.Controls.Add(lt);this.Tips_PlaceHolder.Controls.Add(pnl);}base.OnPreRender (e);}private string GetHeaderTooltipText(int iColIdx){switch (iColIdx){case 0:return "职员的姓";case 1:return "职员名字";case 2:return "职员的职位";case 3:return "出生日期";case 4:return "居住地";default:throw new ArgumentException("无效地列序号", "Index");}}#region Web Form Designer generated codeoverride protected void OnInit(EventArgs e){InitializeComponent();base.OnInit(e);}private void InitializeComponent(){this.WinExplorerView_DataGrid.ItemCreated +=new System.Web.UI.WebControls.DataGridItemEventHandler(this.OnItemCreated);this.WinExplorerView_DataGrid.PageIndexChanged +=new System.Web.UI.WebControls.DataGridPageChangedEventHandler(this.OnPageIndexChange);this.WinExplorerView_DataGrid.SortCommand +=new System.Web.UI.WebControls.DataGridSortCommandEventHandler(this.OnSortView);this.Load += new System.EventHandler(this.Page_Load);}#endregion}}
原创粉丝点击