实现类似Windows资源管理器的DataGrid(2)
点击次数:21 次 发布日期:2008-11-26 14:25:08 作者:源代码网
|
源代码网推荐 { 源代码网推荐 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 源代码网推荐 } 源代码网推荐 } 源代码网推荐 做人要厚道,请注明转自酷网动力(www.ASPCOOL.COM)。 源代码网推荐 源代码网供稿. |
