搜索文章:

首页  |  Java技术  |  Asp.net  |  Asp编程  |  VC/C++  |  Delphi  |  VB编程

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

作者: 孟宪会
     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
  }
  }
  

相关文章:
© 2006   www.java-asp.net