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

来源:互联网 发布:html与php的嵌套 编辑:程序博客网 时间:2024/05/16 12:07

在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"> .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 } </head> <body ms_positioning="GridLayout"> </asp:PlaceHolder> <form id="DataGridLikeWindowsExplorer" method="post" runat="server"> <div align="center"> <h4>Northwind职员表</h4> <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> </asp:BoundColumn> </asp:BoundColumn> </asp:BoundColumn> </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 code override 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 } }
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 淘宝东西没收到显示签收了怎么办 开拼多多店铺的密码忘了怎么办 拼多多密码跟店铺名忘了怎么办 闲鱼上卖出的宝贝被调包了怎么办 上传身份证照片说格式错误该怎么办 我给厂里打的款不给发货怎么办 净值接近不定期份额折算阀值怎么办 有锁电信4g掉了怎么办 在电脑中找不到想作废的发票怎么办 科目三补考费发票丢了怎么办 母婴店飞鹤奶粉突然厂家撤货怎么办 澳门买的保健品感觉是假的怎么办 淘宝买东西提交需求时卡死了怎么办 天猫精灵显示为离线状态怎么办 退货多被淘宝店铺拉入黑名单怎么办 天猫订单3天不发货怎么办 新开的厨卫店越来越没生意怎么办 淘宝积分不够领不到购物津贴怎么办 穿越火线精英集结号积分不足怎么办 天猫购物津贴领多了怎么办 车贷逾期车被开走还不清全款怎么办 孩子特别懒不爱动又胖怎么办 微信的聊天记录被限制了怎么办 门面租金交了一年对方不租了怎么办 离职后社保怎么办 无忧保专业可靠 淘宝店铺被投诉到监管局怎么办 淘宝买家每天都来店铺骚扰怎么办 电脑安装软件时解压出现问题怎么办 公婆不尊重你的父母做媳妇的怎么办 手机扣扣接收不上文件怎么办 买了商铺付了首付商铺倒闭了怎么办 宝宝刚满月不喜欢在床上睡怎么办 别人给我打了收货款不发货怎么办 业务员私收货款公司不发货怎么办 付款后商家没发货也不退钱怎么办 苹果7P修过主板耗电严重怎么办 oppo手机进水了开不了机怎么办 手机弯了变形但不影响使用怎么办 拼多多留错电话怎么办如果已经发货 苹果6手机后壳变形了怎么办 京东退货保修卡丢了怎么办