• 软件测试技术
  • 软件测试博客
  • 软件测试视频
  • 开源软件测试技术
  • 软件测试论坛
  • 软件测试沙龙
  • 软件测试资料下载
  • 软件测试杂志
  • 软件测试人才招聘
    暂时没有公告

字号: 小 中 大 | 推荐给好友 上一篇 | 下一篇

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

发布: 2007-6-30 18:56 | 作者: admin | 来源: | 查看: 14次 | 进入软件测试论坛讨论

领测软件测试网      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
  }
  }
  

延伸阅读

文章来源于领测软件测试网 https://www.ltesting.net/


关于领测软件测试网 | 领测软件测试网合作伙伴 | 广告服务 | 投稿指南 | 联系我们 | 网站地图 | 友情链接
版权所有(C) 2003-2010 TestAge(领测软件测试网)|领测国际科技(北京)有限公司|软件测试工程师培训网 All Rights Reserved
北京市海淀区中关村南大街9号北京理工科技大厦1402室 京ICP备10010545号-5
技术支持和业务联系:[email protected] 电话:010-51297073

软件测试 | 领测国际 | ISTQB | ISTQB官网 | TMMi | TMMi认证 | 国际软件测试工程师认证 | 领测软件测试网