足球游戏_中国足彩网¥体育资讯$

WinForm中DataGridView折叠控件
来源:易贤网 阅读:2896 次 日期:2016-08-09 14:22:58
温馨提示:易贤网小编为您整理了“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 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

//设置构造函数的参数

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集合转换成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);//设置主外键

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

};

//设置表格的主题样式

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

/// 展开图标

/// </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折叠控件
由于各方面情况的不断调整与变化,易贤网提供的所有考试信息和咨询回复仅供参考,敬请考生以权威部门公布的正式信息和咨询为准!
关于我们 | 联系我们 | 人才招聘 | 网站声明 | 网站帮助 | 非正式的简要咨询 | 简要咨询须知 | 加入群交流 | 手机站点 | 投诉建议
工业和信息化部备案号:滇ICP备2023014141号-1 足球游戏_中国足彩网¥体育资讯$ 滇公网安备53010202001879号 人力资源服务许可证:(云)人服证字(2023)第0102001523号
云南网警备案专用图标
联系电话:0871-65317125(9:00—18:00) 获取招聘考试信息及咨询关注公众号:hfpxwx
咨询QQ:526150442(9:00—18:00)版权所有:易贤网
云南网警报警专用图标