zoukankan      html  css  js  c++  java
  • 实现类似Windows资源管理器的DataGrid(转)

    在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 tooltip
    if (document.getElementById)
    tooltip = document.getElementById('htip' + idx)
    else
    tooltip = 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 tooltip
    if (document.getElementById)
    tooltip = document.getElementById('htip' + idx)
    else
    tooltip = 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 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
    }
    }

    原文http://www.mikecat.net/blogview.asp?logID=924&cateID=1
  • 相关阅读:
    [Windows] 输入字符间距变宽
    [Android] 安卓手机不用root删除自带app
    [Linux] 内核通知链 notifier
    [RK3399] ES8316+NS4150 播放视频只有背景音,播放歌曲有的有声音,有的无声音
    [Linux] RTC 读写指令及测试程序
    [Linux] scp指令用法
    [Ubuntu] sudo apt-get update指令执行失败
    [RK3399] 修改移动网络默认为4G
    [RK3288] 外接USB设备出现丢数
    laravel 模拟数据批量添加
  • 原文地址:https://www.cnblogs.com/dagon007/p/116042.html
Copyright © 2011-2022 走看看