中文字幕免费精品_亚洲视频自拍_亚洲综合国产激情另类一区_色综合咪咪久久

WinForm中DataGridView折疊控件
來源:易賢網(wǎng) 閱讀:3379 次 日期:2016-08-09 14:22:58
溫馨提示:易賢網(wǎng)小編為您整理了“WinForm中DataGridView折疊控件”,方便廣大網(wǎng)友查閱!

下面小編把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 構(gòu)造函數(shù)

/// <summary>

/// 通過傳遞過來的枚舉判斷是兩級還是三級展開,表的對應(yīng)關(guān)系通過Relations來讀取

/// 所以調(diào)用此構(gòu)造函數(shù)的時候必須要講Relations設(shè)置正確,才能正確顯示層級關(guān)系。

/// 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的順序不能顛倒,必須先添加一、二級的表關(guān)聯(lián),再添加二、三級的表關(guān)聯(lián)

/// </summary>

/// <param name="cDataset">數(shù)據(jù)源DataSet,里面還有各個表的對應(yīng)關(guān)系</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">第一二層之間對應(yīng)主外鍵</param>

/// <param name="dicRelateKey">第二三層之間對應(yīng)主外鍵</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 });

//這是對應(yīng)關(guān)系的時候主鍵必須唯一

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 數(shù)據(jù)綁定

/// <summary>

/// 設(shè)置表之間的主外鍵關(guān)聯(lián)

/// </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);

//設(shè)置一個最大高度

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 control

var 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);

}

#endregion

sender.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);

}

#endregion

sender.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

//設(shè)置構(gòu)造函數(shù)的參數(shù)

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得到表的關(guān)聯(lián)關(guān)系

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);

}

//.設(shè)置主外鍵對應(yīng)關(guān)系

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集合轉(zhuǎn)換成DataTable

private 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);//設(shè)置主外鍵

//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用來設(shè)置樣式

namespace Ewin.Client.Frame.UcGrid

{

/// <summary>

/// 折疊控件樣式以及行數(shù)操作類

/// </summary>

sealed class cModule

{

#region CustomGrid

static 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

};

//設(shè)置表格的主題樣式

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;

}

//設(shè)置表格單元格樣式

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();

}

//設(shè)置表格的行號

static public void rowPostPaint_HeaderCount(object obj_sender, DataGridViewRowPostPaintEventArgs e)

{

try

{

var sender = (DataGridView)obj_sender;

//set rowheader count

DataGridView 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>

/// 展開圖標(biāo)

/// </summary>

public enum rowHeaderIcons

{

expand = ,

collapse = 

}

}

4、From頁面調(diào)用

#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");//表格一和表格二之間的主外鍵關(guān)系

dicRelateData2.Add("Menu_Name2","Menu_Name2");//表格二和表格三之間的主外鍵關(guān)系 

masterDetail = new MasterControl(GetDataSource(), GetDataSource2(), GetDataSource3(), dicRelateData1, dicRelateData2, controlType.outside); #endregion panelView.Controls.Add(masterDetail);

昨天應(yīng)領(lǐng)導(dǎo)要求,折疊控件增加了折疊線的效果,看起來有沒有更加像模像樣了。~~~

其實就在行重繪事件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折疊控件的相關(guān)知識,希望對大家有所幫助!

更多信息請查看網(wǎng)絡(luò)編程
易賢網(wǎng)手機(jī)網(wǎng)站地址:WinForm中DataGridView折疊控件
由于各方面情況的不斷調(diào)整與變化,易賢網(wǎng)提供的所有考試信息和咨詢回復(fù)僅供參考,敬請考生以權(quán)威部門公布的正式信息和咨詢?yōu)闇?zhǔn)!
關(guān)于我們 | 聯(lián)系我們 | 人才招聘 | 網(wǎng)站聲明 | 網(wǎng)站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 新媒體/短視頻平臺 | 手機(jī)站點

版權(quán)所有:易賢網(wǎng)

中文字幕免费精品_亚洲视频自拍_亚洲综合国产激情另类一区_色综合咪咪久久
男女男精品网站| 午夜精品久久久久久久| 日韩欧美高清在线| 欧美日韩1234| 91精品久久久久久久久99蜜臂| 欧美色综合久久| 欧美视频一区二区三区在线观看 | 色妹子一区二区| 欧美在线观看18| 欧美日韩不卡一区| 欧美色精品天天在线观看视频| 欧美性高清videossexo| 欧美日产国产精品| 久久这里都是精品| 欧美极品另类videosde| 亚洲激情图片一区| 日韩精品电影一区亚洲| 国产综合成人久久大片91| 精品无人码麻豆乱码1区2区| 国产成人精品一区二| 成人免费视频播放| 欧美在线视频不卡| 精品国产一区二区在线观看| 国产午夜精品福利| 亚洲国产日韩综合久久精品| 蜜臀av一级做a爰片久久| 国产99久久久国产精品潘金 | 免费看精品久久片| 国产成人亚洲综合a∨婷婷图片| 成人av在线播放网站| 色菇凉天天综合网| 日韩精品一区二区三区视频在线观看 | 一区二区三区免费在线观看| 日韩高清在线一区| 成人在线视频一区二区| 欧美日韩大陆在线| 日本一区二区三级电影在线观看| 一区二区三区精密机械公司| 国内不卡的二区三区中文字幕| 99精品视频一区| 欧美va亚洲va| 亚洲国产精品人人做人人爽| 国产精品夜夜嗨| 8x8x8国产精品| 自拍偷在线精品自拍偷无码专区| 日产国产欧美视频一区精品| 色域天天综合网| 国产欧美日韩精品一区| 美女脱光内衣内裤视频久久网站 | 国产99久久精品| 日韩精品一区二区三区四区 | 国产日本欧美一区二区| 香蕉加勒比综合久久| 菠萝蜜视频在线观看一区| 精品久久久三级丝袜| 午夜伦理一区二区| 在线中文字幕不卡| 国产精品国产三级国产| 国产一区二区免费在线| 欧美www视频| 蜜臀久久99精品久久久久久9| 欧美影院一区二区三区| 亚洲精品成人少妇| 色老综合老女人久久久| 最新不卡av在线| www.激情成人| 国产精品毛片久久久久久久| 成人综合日日夜夜| 国产欧美一区二区精品性色| 国产精品99久久久久| 精品999久久久| 国产乱码精品一区二区三区av| 欧美嫩在线观看| 日韩精品欧美精品| 日韩女优制服丝袜电影| 美国精品在线观看| 久久夜色精品国产欧美乱极品| 久久99国产精品久久99 | 波多野结衣视频一区| 久久久777精品电影网影网| 久久超碰97人人做人人爱| 欧美成人一区二区| 狠狠v欧美v日韩v亚洲ⅴ| 国产清纯在线一区二区www| 懂色av一区二区三区蜜臀| 国产午夜精品一区二区三区视频| 国产成人av网站| 亚洲黄色免费网站| 51精品视频一区二区三区| 日本在线不卡一区| 精品国产乱码久久久久久牛牛 | 国产成人欧美日韩在线电影| 久久久精品欧美丰满| 成人小视频在线| 综合久久久久综合| 欧美日韩精品欧美日韩精品一 | 精品一区免费av| 中文字幕第一区| 欧美三电影在线| 久久精品国产精品青草| 中文字幕一区二区三区四区 | 亚洲最新在线观看| 日韩午夜激情视频| 成人av在线网| 亚洲人成网站在线| 91福利国产精品| 91麻豆精品国产91久久久资源速度 | 亚洲欧美另类久久久精品| 91国偷自产一区二区开放时间| 午夜av一区二区三区| 久久综合久久综合亚洲| 91在线观看美女| 美女脱光内衣内裤视频久久影院| 国产精品午夜在线观看| 欧美视频一区在线观看| 国产高清在线精品| 亚洲一区二区三区四区在线免费观看 | 青青草成人在线观看| 久久精品亚洲精品国产欧美 | 免费在线观看日韩欧美| 中文字幕一区在线观看视频| 日韩欧美一级片| 欧美亚洲动漫精品| 99久久精品免费| 国产毛片一区二区| 青青青爽久久午夜综合久久午夜| 亚洲激情图片qvod| 中文字幕乱码亚洲精品一区| 欧美成人aa大片| 欧美日韩国产大片| 91在线视频播放地址| 国产91精品露脸国语对白| 美女脱光内衣内裤视频久久影院| 亚洲一区二区三区四区五区中文| 亚洲视频在线观看三级| 中文字幕欧美三区| 精品日韩一区二区三区免费视频| 欧美军同video69gay| 91久久免费观看| 色拍拍在线精品视频8848| eeuss鲁片一区二区三区在线看| 韩国欧美国产1区| 蜜桃传媒麻豆第一区在线观看| 亚洲成av人片www| 亚洲午夜影视影院在线观看| 一区二区三区在线视频免费| 自拍偷自拍亚洲精品播放| 国产精品久久久久aaaa| 亚洲欧洲日韩一区二区三区| 国产精品人成在线观看免费 | 日韩在线一区二区三区| 亚洲伊人色欲综合网| 亚洲综合一区二区三区| 亚洲精品videosex极品| 一区二区三区四区蜜桃| 亚洲影院久久精品| 午夜国产精品一区| 久久国产婷婷国产香蕉| 九九**精品视频免费播放| 狠狠色狠狠色综合系列| 国产高清不卡二三区| 高清成人在线观看| 99久久免费国产| 欧美日韩dvd在线观看| 欧美电影免费观看高清完整版在| 日韩欧美在线综合网| 国产女人水真多18毛片18精品视频| 国产视频一区二区在线| 国产精品日日摸夜夜摸av| 亚洲欧美另类久久久精品2019| 一区二区日韩av| 日韩av成人高清| 成人精品视频一区二区三区尤物| 97se亚洲国产综合自在线不卡| 欧洲精品一区二区三区在线观看| 3d成人动漫网站| 中文字幕va一区二区三区| 亚洲精品成人a在线观看| 裸体歌舞表演一区二区| 成人精品视频.| 7799精品视频| 国产精品久久网站| 日韩影院免费视频| 国产a级毛片一区| 欧美亚洲动漫制服丝袜| 久久久久国产精品免费免费搜索 | 91久久国产最好的精华液| 欧美精品精品一区| 国产日韩一级二级三级| 亚洲午夜久久久久久久久久久 | 欧美日韩夫妻久久| 国产欧美日韩视频在线观看| 夜夜操天天操亚洲| 国产高清一区日本| 欧美一区二区三区喷汁尤物| **欧美大码日韩| 国产精品一区二区在线看| 色婷婷久久久久swag精品| 久久奇米777| 蜜桃一区二区三区在线观看|