亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > .NET > 正文

WinForm中DataGridView折疊控件【超好看】

2024-07-10 13:30:30
字體:
來源:轉載
供稿:網友

剛到一家新公司,領導下發任務要用cs系統做一個表格折疊顯示,這真是把我難倒了,自己工作6年一直以來都是做BS的系統。這如果在BS里面那太簡單了,JqGrid默認都自帶,可是DataGridview不支持折疊啊。自己一點經驗沒有,怎么辦呢?于是上網搜了相關視頻,資料,開始學習起來。最后借鑒源碼封了這么一個東西,發出來分享下,也能讓自己加深印象。

首先不多說,上圖。如果大家感謝還不錯,請繼續往下閱讀:

WinForm,DataGridView,折疊控件

WinForm,DataGridView,折疊控件

WinForm,DataGridView,折疊控件

WinForm,DataGridView,折疊控件

大概的效果就是這樣。

上代碼。

1、首先重寫DataGridview,代碼如下:

public class MasterControl : DataGridView{#region 字段private List<int> rowCurrent = new List<int>();internal static int rowDefaultHeight = ;internal static int rowExpandedHeight = ;internal static int rowDefaultDivider = ;internal static int rowExpandedDivider = - ;internal static int rowDividerMargin = ;internal static bool collapseRow;     //detailControl變量作為一個容器用來保存子表格public detailControl childView = new detailControl() { Visible = false }; // VBConversions Note: Initial value cannot be assigned here since it is non-static. Assignment has been moved to the class constructors.//internal System.Windows.Forms.ImageList RowHeaderIconList;private System.ComponentModel.Container components = null;//DataSet _cDataset;string _foreignKey;string _primaryKey;string _filterFormat;private controlType EControlType;public int ExpandRowIndex = ;#endregion#region 構造函數/// <summary>/// 通過傳遞過來的枚舉判斷是兩級還是三級展開,表的對應關系通過Relations來讀取/// 所以調用此構造函數的時候必須要講Relations設置正確,才能正確顯示層級關系。/// oDataSet.Relations.Add("", oDataSet.Tables["T"].Columns["Menu_ID"], oDataSet.Tables["T"].Columns["Menu_ID"]);/// oDataSet.Relations.Add("", oDataSet.Tables["T"].Columns["Menu_Name"], oDataSet.Tables["T"].Columns["Menu_Name"]);/// 這兩次Add的順序不能顛倒,必須先添加一、二級的表關聯,再添加二、三級的表關聯/// </summary>/// <param name="cDataset">數據源DataSet,里面還有各個表的對應關系</param>/// <param name="eControlType">枚舉類型</param>public MasterControl(DataSet cDataset, controlType eControlType){SetMasterControl(cDataset, eControlType); }/// <summary>/// 第二種使用方法/// </summary>/// <param name="lstData">折疊控件第一層的集合</param>/// <param name="lstData">折疊控件第二層的集合</param>/// <param name="lstData">折疊控件第三層的集合</param>/// <param name="dicRelateKey">第一二層之間對應主外鍵</param>/// <param name="dicRelateKey">第二三層之間對應主外鍵</param>/// <param name="eControlType">枚舉類型</param>public MasterControl(object lstData, object lstData, object lstData, Dictionary<string, string> dicRelateKey, Dictionary<string ,string>dicRelateKey, controlType eControlType){var oDataSet = new DataSet();try{var oTable = new DataTable();oTable = Fill(lstData);oTable.TableName = "T";var oTable = Fill(lstData);oTable.TableName = "T";if (lstData == null || dicRelateKey == null || dicRelateKey.Keys.Count <= ){oDataSet.Tables.AddRange(new DataTable[] { oTable, oTable });oDataSet.Relations.Add("", oDataSet.Tables["T"].Columns[dicRelateKey.Keys.FirstOrDefault()], oDataSet.Tables["T"].Columns[dicRelateKey.Values.FirstOrDefault()]);}else{var oTable = Fill(lstData);oTable.TableName = "T";oDataSet.Tables.AddRange(new DataTable[] { oTable, oTable, oTable });//這是對應關系的時候主鍵必須唯一oDataSet.Relations.Add("", oDataSet.Tables["T"].Columns[dicRelateKey.Keys.FirstOrDefault()], oDataSet.Tables["T"].Columns[dicRelateKey.Values.FirstOrDefault()]);oDataSet.Relations.Add("", oDataSet.Tables["T"].Columns[dicRelateKey.Keys.FirstOrDefault()], oDataSet.Tables["T"].Columns[dicRelateKey.Values.FirstOrDefault()]);}}catch{oDataSet = new DataSet();}SetMasterControl(oDataSet, eControlType);}/// <summary>/// 控件初始化/// </summary>private void InitializeComponent(){this.components = new System.ComponentModel.Container();base.RowHeaderMouseClick += new System.Windows.Forms.DataGridViewCellMouseEventHandler(MasterControl_RowHeaderMouseClick);base.RowPostPaint += new System.Windows.Forms.DataGridViewRowPostPaintEventHandler(MasterControl_RowPostPaint);base.Scroll += new System.Windows.Forms.ScrollEventHandler(MasterControl_Scroll);base.SelectionChanged += new System.EventHandler(MasterControl_SelectionChanged);System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MasterControl));this.RowHeaderIconList = new System.Windows.Forms.ImageList(this.components);((System.ComponentModel.ISupportInitialize)this).BeginInit();this.SuspendLayout();////RowHeaderIconList//this.RowHeaderIconList.ImageStream = (System.Windows.Forms.ImageListStreamer)(resources.GetObject("RowHeaderIconList.ImageStream"));this.RowHeaderIconList.TransparentColor = System.Drawing.Color.Transparent;this.RowHeaderIconList.Images.SetKeyName(, "expand.png");this.RowHeaderIconList.Images.SetKeyName(, "collapse.png");////MasterControl//((System.ComponentModel.ISupportInitialize)this).EndInit();this.ResumeLayout(false);}#endregion#region 數據綁定/// <summary>/// 設置表之間的主外鍵關聯/// </summary>/// <param name="tableName">DataTable的表名稱</param>/// <param name="foreignKey">外鍵</param>public void setParentSource(string tableName, string primarykey, string foreignKey){this.DataSource = new DataView(_cDataset.Tables[tableName]);cModule.setGridRowHeader(this);_foreignKey = foreignKey;_primaryKey = primarykey;if (_cDataset.Tables[tableName].Columns[primarykey].GetType().ToString() == typeof(int).ToString()|| _cDataset.Tables[tableName].Columns[primarykey].GetType().ToString() == typeof(double).ToString()|| _cDataset.Tables[tableName].Columns[primarykey].GetType().ToString() == typeof(decimal).ToString()){_filterFormat = foreignKey + "={}";}else{_filterFormat = foreignKey + "=/'{}/'";}}#endregion#region 事件//控件的行頭點擊事件private void MasterControl_RowHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e){try{Rectangle rect = new Rectangle(System.Convert.ToInt((double)(rowDefaultHeight - ) / ), System.Convert.ToInt((double)(rowDefaultHeight - ) / ), , );if (rect.Contains(e.Location)){//縮起if (rowCurrent.Contains(e.RowIndex)){rowCurrent.Clear();this.Rows[e.RowIndex].Height = rowDefaultHeight;this.Rows[e.RowIndex].DividerHeight = rowDefaultDivider;this.ClearSelection();collapseRow = true;this.Rows[e.RowIndex].Selected = true;if (EControlType == controlType.middle){var oParent = ((MasterControl)this.Parent.Parent);oParent.Rows[oParent.ExpandRowIndex].Height = rowDefaultHeight * (this.Rows.Count + );oParent.Rows[oParent.ExpandRowIndex].DividerHeight = rowDefaultHeight * (this.Rows.Count + );if (oParent.Rows[oParent.ExpandRowIndex].Height > ){oParent.Rows[oParent.ExpandRowIndex].Height = ;oParent.Rows[oParent.ExpandRowIndex].Height = ;}}}//展開else{if (!(rowCurrent.Count == )){var eRow = rowCurrent[];rowCurrent.Clear();this.Rows[eRow].Height = rowDefaultHeight;this.Rows[eRow].DividerHeight = rowDefaultDivider;this.ClearSelection();collapseRow = true;this.Rows[eRow].Selected = true;}rowCurrent.Add(e.RowIndex);this.ClearSelection();collapseRow = true;this.Rows[e.RowIndex].Selected = true;this.ExpandRowIndex = e.RowIndex;this.Rows[e.RowIndex].Height = + rowDefaultHeight * (((DataView)(childView.childGrid[].DataSource)).Count + );this.Rows[e.RowIndex].DividerHeight = + rowDefaultHeight * (((DataView)(childView.childGrid[].DataSource)).Count);//設置一個最大高度if (this.Rows[e.RowIndex].Height > ){this.Rows[e.RowIndex].Height = ;this.Rows[e.RowIndex].DividerHeight = ;}if (EControlType == controlType.middle){if (this.Parent.Parent.GetType() != typeof(MasterControl))return;var oParent = ((MasterControl)this.Parent.Parent);oParent.Rows[oParent.ExpandRowIndex].Height = this.Rows[e.RowIndex].Height + rowDefaultHeight * (this.Rows.Count + );oParent.Rows[oParent.ExpandRowIndex].DividerHeight = this.Rows[e.RowIndex].DividerHeight + rowDefaultHeight * (this.Rows.Count + );if (oParent.Rows[oParent.ExpandRowIndex].Height > ){oParent.Rows[oParent.ExpandRowIndex].Height = ;oParent.Rows[oParent.ExpandRowIndex].Height = ;}}//if (EControlType == controlType.outside)//{// //SetControl(this);//}//this.Rows[e.RowIndex].Height = rowExpandedHeight;//this.Rows[e.RowIndex].DividerHeight = rowExpandedDivider;}//this.ClearSelection();//collapseRow = true;//this.Rows[e.RowIndex].Selected = true;}else{collapseRow = false;}}catch (Exception ex){}}//控件的行重繪事件private void MasterControl_RowPostPaint(object obj_sender, DataGridViewRowPostPaintEventArgs e){try{var sender = (DataGridView)obj_sender;//set childview controlvar rect = new Rectangle((int)(e.RowBounds.X + ((double)(rowDefaultHeight - ) / )), (int)(e.RowBounds.Y + ((double)(rowDefaultHeight - ) / )), , );if (collapseRow){if (this.rowCurrent.Contains(e.RowIndex)){#region 更改點開后背景色 劉金龍var rect = new Rectangle(e.RowBounds.X, e.RowBounds.Y + rowDefaultHeight, e.RowBounds.Width, e.RowBounds.Height - rowDefaultHeight);using (Brush b = new SolidBrush(Color.FromArgb(, , ))){e.Graphics.FillRectangle(b, rect);} #endregionsender.Rows[e.RowIndex].DividerHeight = sender.Rows[e.RowIndex].Height - rowDefaultHeight;e.Graphics.DrawImage(RowHeaderIconList.Images[(int)rowHeaderIcons.collapse], rect);childView.Location = new Point(e.RowBounds.Left + sender.RowHeadersWidth, e.RowBounds.Top + rowDefaultHeight + );childView.Width = e.RowBounds.Right - sender.RowHeadersWidth;childView.Height = System.Convert.ToInt(sender.Rows[e.RowIndex].DividerHeight - );childView.Visible = true;}else{childView.Visible = false;e.Graphics.DrawImage(RowHeaderIconList.Images[(int)rowHeaderIcons.expand], rect);}collapseRow = false;}else{if (this.rowCurrent.Contains(e.RowIndex)){#region 更改點開后背景色 劉金龍var rect = new Rectangle(e.RowBounds.X, e.RowBounds.Y + rowDefaultHeight, e.RowBounds.Width, e.RowBounds.Height - rowDefaultHeight);using (Brush b = new SolidBrush(Color.FromArgb(,,))){e.Graphics.FillRectangle(b, rect);} #endregionsender.Rows[e.RowIndex].DividerHeight = sender.Rows[e.RowIndex].Height - rowDefaultHeight;e.Graphics.DrawImage(RowHeaderIconList.Images[(int)rowHeaderIcons.collapse], rect);childView.Location = new Point(e.RowBounds.Left + sender.RowHeadersWidth, e.RowBounds.Top + rowDefaultHeight + );childView.Width = e.RowBounds.Right - sender.RowHeadersWidth;childView.Height = System.Convert.ToInt(sender.Rows[e.RowIndex].DividerHeight - );childView.Visible = true;}else{childView.Visible = false;e.Graphics.DrawImage(RowHeaderIconList.Images[(int)rowHeaderIcons.expand], rect);}}cModule.rowPostPaint_HeaderCount(sender, e);}catch{}}//控件的滾動條滾動事件private void MasterControl_Scroll(object sender, ScrollEventArgs e){try{if (!(rowCurrent.Count == )){collapseRow = true;this.ClearSelection();this.Rows[rowCurrent[]].Selected = true;}}catch{}}//控件的單元格選擇事件private void MasterControl_SelectionChanged(object sender, EventArgs e){try{if (!(this.RowCount == )){if (rowCurrent.Contains(this.CurrentRow.Index)){foreach (DataGridView cGrid in childView.childGrid){((DataView)cGrid.DataSource).RowFilter = string.Format(_filterFormat, this[_primaryKey, this.CurrentRow.Index].Value);}}}}catch{}}#endregion#region Private//設置構造函數的參數private void SetMasterControl(DataSet cDataset, controlType eControlType){//.控件初始化賦值this.Controls.Add(childView);InitializeComponent();_cDataset = cDataset;childView._cDataset = cDataset;cModule.applyGridTheme(this);Dock = DockStyle.Fill;EControlType = eControlType;this.AllowUserToAddRows = false;//.通過讀取DataSet里面的Relations得到表的關聯關系if (cDataset.Relations.Count <= ){return;}DataRelation oRelates;if (eControlType == controlType.outside){oRelates = cDataset.Relations[];childView.Add(oRelates.ParentTable.TableName, oRelates.ParentColumns[].ColumnName, oRelates.ChildColumns[].ColumnName);}else if (eControlType == controlType.middle){oRelates = cDataset.Relations[cDataset.Relations.Count - ];childView.Add(oRelates.ChildTable.TableName);}//.設置主外鍵對應關系oRelates = cDataset.Relations[];//主表里面的值,副表里面的過濾字段setParentSource(oRelates.ParentTable.TableName,oRelates.ParentColumns[].ColumnName, oRelates.ChildColumns[].ColumnName);}private void SetControl(MasterControl oGrid){oGrid.childView.RemoveControl();//oGrid.childView.Controls.RemoveByKey("ChildrenMaster");////var oRelates = _cDataset.Relations[];//oGrid.childView.Add(oRelates.ParentTable.TableName, oRelates.ChildColumns[].ColumnName);//foreach (var oGridControl in oGrid.Controls)//{// if (oGridControl.GetType() != typeof(detailControl))// {// continue;// }// var DetailControl =(detailControl)oGridControl;// foreach (var odetailControl in DetailControl.Controls)// {// if (odetailControl.GetType() != typeof(MasterControl))// {// continue;// }// var OMasterControl = (MasterControl)odetailControl;// foreach (var oMasterControl in OMasterControl.Controls)// {// if (oMasterControl.GetType() == typeof(detailControl))// {// ((detailControl)oMasterControl).Visible = false;// return;// }// }// }//}}//將List集合轉換成DataTableprivate DataTable Fill(object obj){if(!(obj is IList)){return null;}var objlist = obj as IList;if (objlist == null || objlist.Count <= ){return null;}var tType = objlist[];DataTable dt = new DataTable(tType.GetType().Name);DataColumn column;DataRow row;System.Reflection.PropertyInfo[] myPropertyInfo = tType.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance);foreach (var t in objlist){if (t == null){continue;}row = dt.NewRow();for (int i = , j = myPropertyInfo.Length; i < j; i++){System.Reflection.PropertyInfo pi = myPropertyInfo[i];string name = pi.Name;if (dt.Columns[name] == null){column = new DataColumn(name, pi.PropertyType);dt.Columns.Add(column);}row[name] = pi.GetValue(t, null);}dt.Rows.Add(row);}return dt;}#endregion} 

2、detailControl變量作為一個容器用來保存子表格

代碼如下:

public class detailControl : Ewin.Client.Frame.Controls.EwinPanel{#region 字段public List<DataGridView> childGrid = new List<DataGridView>();public DataSet _cDataset;#endregion#region 方法public void Add(string tableName, string strPrimaryKey, string strForeignKey){//TabPage tPage = new TabPage() { Text = pageCaption };//this.Controls.Add(tPage);var newGrid = new MasterControl(_cDataset, controlType.middle) { Dock = DockStyle.Fill, DataSource = new DataView(_cDataset.Tables[tableName]) };newGrid.setParentSource(tableName, strPrimaryKey, strForeignKey);//設置主外鍵//newGrid.Name = "ChildrenMaster";//tPage.Controls.Add(newGrid);this.Controls.Add(newGrid);//this.BorderStyle = BorderStyle.FixedSingle;cModule.applyGridTheme(newGrid);cModule.setGridRowHeader(newGrid);newGrid.RowPostPaint += cModule.rowPostPaint_HeaderCount;childGrid.Add(newGrid);}public void Add(string tableName){//TabPage tPage = new TabPage() { Text = pageCaption };//this.Controls.Add(tPage);DataGridView newGrid = new Ewin.Client.Frame.Controls.EwinGrid() { Dock = DockStyle.Fill, DataSource = new DataView(_cDataset.Tables[tableName]) };newGrid.AllowUserToAddRows = false;//tPage.Controls.Add(newGrid);this.Controls.Add(newGrid);cModule.applyGridTheme(newGrid);cModule.setGridRowHeader(newGrid);newGrid.RowPostPaint += cModule.rowPostPaint_HeaderCount;childGrid.Add(newGrid);}public void RemoveControl(){this.Controls.Remove(childGrid[]);childGrid.Clear();}#endregion} 

3、cModule.cs用來設置樣式

namespace Ewin.Client.Frame.UcGrid{/// <summary>/// 折疊控件樣式以及行數操作類/// </summary>sealed class cModule{#region CustomGridstatic System.Windows.Forms.DataGridViewCellStyle dateCellStyle = new System.Windows.Forms.DataGridViewCellStyle { Alignment = DataGridViewContentAlignment.MiddleRight };static System.Windows.Forms.DataGridViewCellStyle amountCellStyle = new System.Windows.Forms.DataGridViewCellStyle { Alignment = DataGridViewContentAlignment.MiddleRight, Format = "N" };static System.Windows.Forms.DataGridViewCellStyle gridCellStyle = new System.Windows.Forms.DataGridViewCellStyle{Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft,BackColor = System.Drawing.Color.FromArgb(System.Convert.ToInt(System.Convert.ToByte()), System.Convert.ToInt(System.Convert.ToByte()), System.Convert.ToInt(System.Convert.ToByte())),Font = new System.Drawing.Font("Segoe UI", (float)(.F), System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, System.Convert.ToByte()),ForeColor = System.Drawing.SystemColors.ControlLightLight,SelectionBackColor = System.Drawing.SystemColors.Highlight,SelectionForeColor = System.Drawing.SystemColors.HighlightText,WrapMode = System.Windows.Forms.DataGridViewTriState.True};static System.Windows.Forms.DataGridViewCellStyle gridCellStyle = new System.Windows.Forms.DataGridViewCellStyle{Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft,BackColor = System.Drawing.SystemColors.ControlLightLight,Font = new System.Drawing.Font("Segoe UI", (float)(.F), System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, System.Convert.ToByte()),ForeColor = System.Drawing.SystemColors.ControlText,SelectionBackColor = System.Drawing.Color.FromArgb(System.Convert.ToInt(System.Convert.ToByte()), System.Convert.ToInt(System.Convert.ToByte()), System.Convert.ToInt(System.Convert.ToByte())),SelectionForeColor = System.Drawing.SystemColors.HighlightText,WrapMode = System.Windows.Forms.DataGridViewTriState.False};static System.Windows.Forms.DataGridViewCellStyle gridCellStyle = new System.Windows.Forms.DataGridViewCellStyle{Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft,BackColor = System.Drawing.Color.WhiteSmoke,Font = new System.Drawing.Font("Segoe UI", (float)(.F), System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, System.Convert.ToByte()),ForeColor = System.Drawing.SystemColors.WindowText,SelectionBackColor = System.Drawing.Color.FromArgb(System.Convert.ToInt(System.Convert.ToByte()), System.Convert.ToInt(System.Convert.ToByte()), System.Convert.ToInt(System.Convert.ToByte())),SelectionForeColor = System.Drawing.SystemColors.HighlightText,WrapMode = System.Windows.Forms.DataGridViewTriState.True};//設置表格的主題樣式static public void applyGridTheme(DataGridView grid){grid.AllowUserToAddRows = false;grid.AllowUserToDeleteRows = false;grid.BackgroundColor = System.Drawing.SystemColors.Window;grid.BorderStyle = System.Windows.Forms.BorderStyle.None;grid.ColumnHeadersBorderStyle = System.Windows.Forms.DataGridViewHeaderBorderStyle.Single;grid.ColumnHeadersDefaultCellStyle = gridCellStyle;grid.ColumnHeadersHeight = ;grid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.DisableResizing;grid.DefaultCellStyle = gridCellStyle;grid.EnableHeadersVisualStyles = false;grid.GridColor = System.Drawing.SystemColors.GradientInactiveCaption;//grid.ReadOnly = true;grid.RowHeadersVisible = true;grid.RowHeadersBorderStyle = System.Windows.Forms.DataGridViewHeaderBorderStyle.Single;grid.RowHeadersDefaultCellStyle = gridCellStyle;grid.Font = gridCellStyle.Font;}//設置表格單元格樣式static public void setGridRowHeader(DataGridView dgv, bool hSize = false){dgv.TopLeftHeaderCell.Value = "NO ";dgv.TopLeftHeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter;dgv.AutoResizeRowHeadersWidth(DataGridViewRowHeadersWidthSizeMode.AutoSizeToDisplayedHeaders);foreach (DataGridViewColumn cCol in dgv.Columns){if (cCol.ValueType.ToString() == typeof(DateTime).ToString()){cCol.DefaultCellStyle = dateCellStyle;}else if (cCol.ValueType.ToString() == typeof(decimal).ToString() || cCol.ValueType.ToString() == typeof(double).ToString()){cCol.DefaultCellStyle = amountCellStyle;}}if (hSize){dgv.RowHeadersWidth = dgv.RowHeadersWidth + ;}dgv.AutoResizeColumns();}//設置表格的行號static public void rowPostPaint_HeaderCount(object obj_sender, DataGridViewRowPostPaintEventArgs e){try{var sender = (DataGridView)obj_sender;//set rowheader countDataGridView grid = (DataGridView)sender;string rowIdx = System.Convert.ToString((e.RowIndex + ).ToString());var centerFormat = new StringFormat();centerFormat.Alignment = StringAlignment.Center;centerFormat.LineAlignment = StringAlignment.Center;Rectangle headerBounds = new Rectangle(e.RowBounds.Left, e.RowBounds.Top,grid.RowHeadersWidth, e.RowBounds.Height - sender.Rows[e.RowIndex].DividerHeight);e.Graphics.DrawString(rowIdx, grid.Font, SystemBrushes.ControlText,headerBounds, centerFormat);}catch (Exception ex){}}#endregion}/// <summary>/// 控件類型,是最外層的表格還是中間層的表格/// </summary>public enum controlType{outside = ,middle = }/// <summary>/// 展開圖標/// </summary>public enum rowHeaderIcons{expand = ,collapse = }}

4、From頁面調用

#region 使用方法一

//var oDataSet = GetDataSet();////masterDetail = new MasterControl(oDataSet, controlType.outside); #endregion

#region 使用方法二

var dicRelateData1 = new Dictionary<string, string>();var dicRelateData2 = new Dictionary<string, string>();dicRelateData1.Add("Menu_ID","Menu_ID");//表格一和表格二之間的主外鍵關系dicRelateData2.Add("Menu_Name2","Menu_Name2");//表格二和表格三之間的主外鍵關系 masterDetail = new MasterControl(GetDataSource(), GetDataSource2(), GetDataSource3(), dicRelateData1, dicRelateData2, controlType.outside); #endregion panelView.Controls.Add(masterDetail); 

昨天應領導要求,折疊控件增加了折疊線的效果,看起來有沒有更加像模像樣了。~~~

其實就在行重繪事件private void MasterControl_RowPostPaint(object obj_sender, DataGridViewRowPostPaintEventArgs e)里面增加了如下代碼:

using (Pen p = new Pen(Color.GhostWhite)){var iHalfWidth = (e.RowBounds.Left + sender.RowHeadersWidth) / 2;var oPointHLineStart = new Point(rect1.X + iHalfWidth, rect1.Y);var oPointHLineEnd = new Point(rect1.X + iHalfWidth, rect1.Y + rect1.Height / 2);e.Graphics.DrawLine(p, oPointHLineStart, oPointHLineEnd);//折疊線e.Graphics.DrawLine(p, oPointHLineEnd, new Point(oPointHLineEnd.X + iHalfWidth, oPointHLineEnd.Y));}


效果如下:

WinForm,DataGridView,折疊控件

以上所述是小編給大家介紹的WinForm中DataGridView折疊控件的相關知識,希望對大家有所幫助!


注:相關教程知識閱讀請移步到ASP.NET教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美色videos| 亚洲丝袜一区在线| 欧美亚洲在线观看| 国产成人精品电影久久久| 欧美精品中文字幕一区| 97视频人免费观看| 亚洲视频在线视频| 国产精品中文字幕在线| 亚洲福利视频在线| 宅男66日本亚洲欧美视频| 性夜试看影院91社区| 成人做爽爽免费视频| 最近2019中文免费高清视频观看www99| 亚洲v日韩v综合v精品v| 91系列在线播放| 亚洲精品国产精品国自产在线| 色无极影院亚洲| 亚洲欧美日韩第一区| 国产精品久久久久高潮| 欧美俄罗斯性视频| 精品无人国产偷自产在线| 高清欧美电影在线| 精品一区二区三区四区| 国模视频一区二区| 福利一区福利二区微拍刺激| 国产日韩在线看| 欧美国产精品人人做人人爱| 色综合导航网站| 亚洲欧美在线免费| 91在线观看免费高清| 国产精品成人一区| 亚洲风情亚aⅴ在线发布| 国产一区香蕉久久| 日韩美女在线播放| 欧美电影免费观看高清完整| 欧美有码在线视频| 国产一区红桃视频| 国产中文字幕91| 亚洲aa中文字幕| 久久国产精品久久国产精品| 超碰日本道色综合久久综合| 精品国产一区二区三区四区在线观看| 中文字幕日本欧美| 久久久久成人精品| 日本国产一区二区三区| 成人观看高清在线观看免费| 精品国产1区2区| 欧美另类极品videosbestfree| 亚洲一区二区三区四区视频| 成人h视频在线| 国产精品高清免费在线观看| 热re99久久精品国产66热| 欧美夫妻性生活视频| 久久夜精品香蕉| www.日韩.com| 中文字幕亚洲一区在线观看| 久久天天躁日日躁| 欧美日韩成人免费| 国产成人av在线| 国产欧美一区二区三区在线| 日韩欧美精品网站| 91久久综合亚洲鲁鲁五月天| 狠狠爱在线视频一区| 国产在线观看精品| 色综合久久88色综合天天看泰| 午夜精品一区二区三区av| 国产精品一久久香蕉国产线看观看| 2021久久精品国产99国产精品| 亚洲日本中文字幕| 日韩中文字幕国产| 亚洲精品欧美日韩专区| 亚洲欧美日韩综合| 国产91精品不卡视频| 91精品国产综合久久久久久久久| 欧美成人精品在线视频| 国产精品电影一区| 亚洲人成网站999久久久综合| 国产精品扒开腿做爽爽爽的视频| 成人久久一区二区| 日韩av在线免费观看一区| 欧美日韩成人在线播放| 91深夜福利视频| 国模私拍一区二区三区| 狠狠躁夜夜躁人人躁婷婷91| 国产成人亚洲综合青青| 精品成人国产在线观看男人呻吟| 欧美老女人性视频| 亚洲精品日韩在线| 2021久久精品国产99国产精品| 欧美大片va欧美在线播放| 另类色图亚洲色图| 欧美中文字幕在线观看| 国产91色在线播放| 欧美老女人bb| 国产成人鲁鲁免费视频a| 91欧美精品成人综合在线观看| 久久天天躁夜夜躁狠狠躁2022| 国产精品美女呻吟| 欧美性xxxx极品hd欧美风情| 欧美成年人视频网站| 亚洲视频在线观看| 两个人的视频www国产精品| 久久色在线播放| 午夜精品福利视频| 中文字幕九色91在线| 久久久91精品国产一区不卡| 亚洲美女激情视频| 91久久国产综合久久91精品网站| 6080yy精品一区二区三区| 久久久国产精品视频| 影音先锋欧美精品| 91九色国产社区在线观看| 亚洲免费视频在线观看| 亚洲一品av免费观看| 久久国产精品久久国产精品| 欧美午夜美女看片| 午夜精品久久久久久久白皮肤| 在线播放国产一区二区三区| 久久久成人精品| 亚洲精品自拍第一页| 日韩大片免费观看视频播放| 亚洲成av人乱码色午夜| 视频一区视频二区国产精品| 欧美日韩另类视频| 欧美人成在线视频| 国产精品久久久久久久久免费看| 久久艳片www.17c.com| 国产精品久久婷婷六月丁香| 亚洲午夜性刺激影院| 91久久综合亚洲鲁鲁五月天| 精品香蕉一区二区三区| 国产丝袜视频一区| 欧美成人午夜影院| 欧美日韩一区二区免费视频| 中文字幕免费国产精品| 国产精品男人的天堂| 久久精品夜夜夜夜夜久久| 日韩激情在线视频| 亚洲视频在线观看免费| 日产精品久久久一区二区福利| 青草成人免费视频| 91香蕉嫩草神马影院在线观看| 亚洲美女动态图120秒| 久久久久久成人精品| 久久综合免费视频影院| 亚洲天堂一区二区三区| 国产日韩精品在线观看| 日本不卡高字幕在线2019| 欧美激情成人在线视频| 久久国产色av| 色偷偷av亚洲男人的天堂| 日本欧美国产在线| 精品久久久精品| 亚洲欧美国产制服动漫| 国产在线精品成人一区二区三区| 亚洲欧洲午夜一线一品| 国产精品爽黄69| 亚洲国模精品私拍| 久久久久久久亚洲精品| 国产精品丝袜一区二区三区| 成人免费观看a| 欧美午夜精品久久久久久浪潮| 久久久99免费视频| 91精品国产91|