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

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

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>
<!--{PS..1}-->
</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>

C#(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
}
}
类似于windows资源管理器 这是用C#做的一个类似于windows的资源管理器,虽然不太美观,还有很多缺陷,但是我们只是拿来学习一下,能力有限,仅供学习用 立即下载

相关推荐

html+css+js仿windows桌面、windows窗口

用html、css、js实现的windows桌面和窗口。包括开始菜单、状态蓝、窗口等。和windows系统操作方法一样,如双击图标打开窗口,不用的窗口最小化到状态蓝,右击桌面图标可打开右键菜单。开始菜单中附件---游戏中有常见游戏。有适用万年历和设置壁纸功能。壁纸设置和windows设置壁纸一样。 你还可以自己新建新窗口,创建方法已封装好。可以自己修改开始菜单,桌面图标右键菜单。 窗口有最大化最小化还原功能。 每个窗口可以指向一个页面作为显示内容,可以做系统界面。 如果作为web项目主界面可以让用户像操作windows一样操作web程序。

html5模仿windows资源管理器,仿windows资源管理器

【实例简介】非常实用的入门程序,Windows资源管理,调取资源图片,鼠标右键新增、删除、修改文件夹和文件。【实例截图】【核心代码】#region 添加我的电脑TreeNode myComputer = new TreeNode();DirectoryClass myCom = new DirectoryClass();myCom.Name = "我的电脑";myCom.IsDirectory =...

weixin_39915171的博客 1251

仿windows资源管理器源码

仿windows资源管理器源码,基本功能都达到了,加了很多中文注释。高手过。别BS俺就行。

推荐一款便携式的Windows资源管理器替代品:WExplorer

是一个便携式的Windows替代品。这个应用程序体积小巧,对资源消耗低,为用户提供了一个更简洁的体验。它采用双窗口布局,包括树状视图和文件。WExplorer还具有快速搜索功能,可以在当前文件夹执行各种操作,如重命名、删除文件、复制、粘贴等。其中一个特色功能是它所包含的饼图,用于显示文件分配情况。用户甚至可以调用新的命令提示符窗口,创建新文件/文件夹等。

xzji001的博客 2618

DataGridDemo

初学C++,学到DataGrid数据绑定,搞死了,C++里面的绑定比C#里的难搞多了。 关键是有很多设置对我这个初学C++的人来说,不清楚。 VS2010 Win7 64位 C++ MFC DataGrid绑定实例Access数据库。

基于VUE(资源管理系统)前端项目

基于VUE(资源管理系统)前端项目

Java实现的文件资源管理器——仿Windows

完整项目文件下载链接:点击打开链接 实现的功能有: 1.模仿Windows的文件资源管理器对本机的文件目录树的显示,对文件目录进行查看和浏览,用地址栏、文件目录树、打开文件夹等方法都可以在文件目录之间进行跳转 2.对文件的基本操作:打开、删除、批量删除、重命名、相关属性查看 3.对磁盘的基本操作:打开、容量及相关属性查看 4.按需筛选选定目录下的视频、音乐...

sinyusin的博客 2万+

Android手机免root玩转Kali NetHunter:Termux保姆级安装指南(附Kex VNC配置)

本文提供了一份详细的Android手机免root安装Kali NetHunter的保姆级指南。通过使用Termux终端模拟器,用户无需解锁Bootloader或获取root权限,即可在普通安卓设备上部署完整的Kali Linux渗透测试环境。教程涵盖了从环境准备、NetHunter核心安装到配置Kex VNC实现图形桌面访问的全过程,并附带了电脑投屏与常见问题解决方案,旨在打造一个便携的移动安全学习与测试平台。

weixin_29208327的博客 304

图像质量评估(5) -- 畸变(Distortion)

当图像中原本应该是直线的地方看起来发生了不自然的变形或扭曲时,我们称为图像畸变。有三种类型的镜头畸变:桶形畸变(后文使用英文barrel),枕形畸变(后文使用pincushion)和胡子畸变(后文使用英文wavef或mustache,这种畸变里包含了桶形畸变和枕形畸变)。有一个重要的点需要注意,根据透镜的类型以及透镜是否能够从相机中移除等条件不同,畸变会有不同的表现。 总的来说,旋转对称光学系统功能上会产生和物体几何相似的图形。但也有少数特殊的系统是例外,例如鱼眼镜头,这种镜头几何是故意设计为

vivo01的专栏 2万+

5分钟搞懂MSDNet:用Transformer实现小样本语义分割的保姆级教程

本文详细介绍了MSDNet(Multi-Scale Decoder Network)如何利用Transformer架构实现小样本语义分割。通过多尺度解码器和空间Transformer解码器,MSDNet能够在仅有1-5张标注图像的情况下完成精确分割任务。文章提供了PyTorch代码实例和优化技巧,帮助开发者快速掌握这一前沿技术。

weixin_30832143的博客 506
上一篇: 在后代码里创建DataGrid控件
下一篇: 在XSLT实现按日期排序
java2000_test
博客等级 码龄19年 10粉丝 320原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值