jqgrid demo折叠

jqGrid操作说明(文档是我以前整理的)_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
jqGrid操作说明(文档是我以前整理的)
上传于||暂无简介
阅读已结束,如果下载本文需要使用0下载券
想免费下载更多文档?
下载文档到电脑,查找使用更方便
还剩11页未读,继续阅读
你可能喜欢WinForm中DataGridView折叠控件【超好看】
作者:懒得安分
字体:[ ] 类型:转载 时间:
刚到一家新公司,领导下发任务要用cs系统做一个表格折叠显示,这真是把我难倒了,自己工作6年一直以来都是做BS的系统,于是上网搜了相关视频,资料,开始学习起来,下面小编把WinForm中DataGridView折叠控件的知识分享给大家,供大家参考
刚到一家新公司,领导下发任务要用cs系统做一个表格折叠显示,这真是把我难倒了,自己工作6年一直以来都是做BS的系统。这如果在BS里面那太简单了,JqGrid默认都自带,可是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 collapseR
     //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 RowHeaderIconL
ponentModel.Container components =
DataSet _cD
string _foreignK
string _primaryK
string _filterF
private controlType EControlT
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();
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()]);
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()]);
oDataSet = new DataSet();
SetMasterControl(oDataSet, eControlType);
/// &summary&
/// 控件初始化
/// &/summary&
private void InitializeComponent()
ponents = ponentModel.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);
ponentResourceManager resources = ponentResourceManager(typeof(MasterControl));
this.RowHeaderIconList = new System.Windows.Forms.ponents);
((ponentModel.ISupportInitialize)this).BeginInit();
this.SuspendLayout();
//RowHeaderIconList
this.RowHeaderIconList.ImageStream = (System.Windows.Forms.ImageListStreamer)(resources.GetObject("RowHeaderIconList.ImageStream"));
this.RowHeaderIconList.TransparentColor = System.Drawing.Color.T
this.RowHeaderIconList.Images.SetKeyName(, "expand.png");
this.RowHeaderIconList.Images.SetKeyName(, "collapse.png");
//MasterControl
((ponentModel.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 = foreignK
_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 + "={}";
_filterFormat = foreignKey + "=\'{}\'";
#endregion
#region 事件
//控件的行头点击事件
private void MasterControl_RowHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e)
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 = rowDefaultH
this.Rows[e.RowIndex].DividerHeight = rowDefaultD
this.ClearSelection();
collapseRow =
this.Rows[e.RowIndex].Selected =
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 = ;
if (!(rowCurrent.Count == ))
var eRow = rowCurrent[];
rowCurrent.Clear();
this.Rows[eRow].Height = rowDefaultH
this.Rows[eRow].DividerHeight = rowDefaultD
this.ClearSelection();
collapseRow =
this.Rows[eRow].Selected =
rowCurrent.Add(e.RowIndex);
this.ClearSelection();
collapseRow =
this.Rows[e.RowIndex].Selected =
this.ExpandRowIndex = e.RowI
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))
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 = rowExpandedH
//this.Rows[e.RowIndex].DividerHeight = rowExpandedD
//this.ClearSelection();
//collapseRow =
//this.Rows[e.RowIndex].Selected =
collapseRow =
catch (Exception ex)
//控件的行重绘事件
private void MasterControl_RowPostPaint(object obj_sender, DataGridViewRowPostPaintEventArgs e)
var sender = (DataGridView)obj_
//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 - rowDefaultH
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.RowHeadersW
childView.Height = System.Convert.ToInt(sender.Rows[e.RowIndex].DividerHeight - );
childView.Visible =
childView.Visible =
e.Graphics.DrawImage(RowHeaderIconList.Images[(int)rowHeaderIcons.expand], rect);
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 - rowDefaultH
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.RowHeadersW
childView.Height = System.Convert.ToInt(sender.Rows[e.RowIndex].DividerHeight - );
childView.Visible =
childView.Visible =
e.Graphics.DrawImage(RowHeaderIconList.Images[(int)rowHeaderIcons.expand], rect);
cModule.rowPostPaint_HeaderCount(sender, e);
//控件的滚动条滚动事件
private void MasterControl_Scroll(object sender, ScrollEventArgs e)
if (!(rowCurrent.Count == ))
collapseRow =
this.ClearSelection();
this.Rows[rowCurrent[]].Selected =
//控件的单元格选择事件
private void MasterControl_SelectionChanged(object sender, EventArgs e)
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);
#endregion
#region Private
//设置构造函数的参数
private void SetMasterControl(DataSet cDataset, controlType eControlType)
//.控件初始化赋值
this.Controls.Add(childView);
InitializeComponent();
_cDataset = cD
childView._cDataset = cD
cModule.applyGridTheme(this);
Dock = DockStyle.F
EControlType = eControlT
this.AllowUserToAddRows =
//.通过读取DataSet里面的Relations得到表的关联关系
if (cDataset.Relations.Count &= )
DataRelation oR
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))
// var DetailControl =(detailControl)oGridC
// foreach (var odetailControl in DetailControl.Controls)
// if (odetailControl.GetType() != typeof(MasterControl))
// var OMasterControl = (MasterControl)odetailC
// foreach (var oMasterControl in OMasterControl.Controls)
// if (oMasterControl.GetType() == typeof(detailControl))
// ((detailControl)oMasterControl).Visible =
//将List集合转换成DataTable
private DataTable Fill(object obj)
if(!(obj is IList))
var objlist = obj as IL
if (objlist == null || objlist.Count &= )
var tType = objlist[];
DataTable dt = new DataTable(tType.GetType().Name);
System.Reflection.PropertyInfo[] myPropertyInfo = tType.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance);
foreach (var t in objlist)
if (t == null)
row = dt.NewRow();
for (int i = , j = myPropertyInfo.L i & i++)
System.Reflection.PropertyInfo pi = myPropertyInfo[i];
string name = pi.N
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);
#endregion
2、detailControl变量作为一个容器用来保存子表格
代码如下:
public class detailControl : Ewin.Client.Frame.Controls.EwinPanel
#region 字段
public List&DataGridView& childGrid = new List&DataGridView&();
public DataSet _cD
#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.FixedS
cModule.applyGridTheme(newGrid);
cModule.setGridRowHeader(newGrid);
newGrid.RowPostPaint += cModule.rowPostPaint_HeaderC
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 =
//tPage.Controls.Add(newGrid);
this.Controls.Add(newGrid);
cModule.applyGridTheme(newGrid);
cModule.setGridRowHeader(newGrid);
newGrid.RowPostPaint += cModule.rowPostPaint_HeaderC
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 =
grid.AllowUserToDeleteRows =
grid.BackgroundColor = System.Drawing.SystemColors.W
grid.BorderStyle = System.Windows.Forms.BorderStyle.N
grid.ColumnHeadersBorderStyle = System.Windows.Forms.DataGridViewHeaderBorderStyle.S
grid.ColumnHeadersDefaultCellStyle = gridCellS
grid.ColumnHeadersHeight = ;
grid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.DisableR
grid.DefaultCellStyle = gridCellS
grid.EnableHeadersVisualStyles =
grid.GridColor = System.Drawing.SystemColors.GradientInactiveC
//grid.ReadOnly =
grid.RowHeadersVisible =
grid.RowHeadersBorderStyle = System.Windows.Forms.DataGridViewHeaderBorderStyle.S
grid.RowHeadersDefaultCellStyle = gridCellS
grid.Font = gridCellStyle.F
//设置表格单元格样式
static public void setGridRowHeader(DataGridView dgv, bool hSize = false)
dgv.TopLeftHeaderCell.Value = "NO ";
dgv.TopLeftHeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleC
dgv.AutoResizeRowHeadersWidth(DataGridViewRowHeadersWidthSizeMode.AutoSizeToDisplayedHeaders);
foreach (DataGridViewColumn cCol in dgv.Columns)
if (cCol.ValueType.ToString() == typeof(DateTime).ToString())
cCol.DefaultCellStyle = dateCellS
else if (cCol.ValueType.ToString() == typeof(decimal).ToString() || cCol.ValueType.ToString() == typeof(double).ToString())
cCol.DefaultCellStyle = amountCellS
if (hSize)
dgv.RowHeadersWidth = dgv.RowHeadersWidth + ;
dgv.AutoResizeColumns();
//设置表格的行号
static public void rowPostPaint_HeaderCount(object obj_sender, DataGridViewRowPostPaintEventArgs e)
var sender = (DataGridView)obj_
//set rowheader count
DataGridView grid = (DataGridView)
string rowIdx = System.Convert.ToString((e.RowIndex + ).ToString());
var centerFormat = new StringFormat();
centerFormat.Alignment = StringAlignment.C
centerFormat.LineAlignment = StringAlignment.C
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 = ,
/// &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折叠控件的相关知识,希望对大家有所帮助!
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具}

我要回帖

更多关于 jqgrid treegrid 折叠 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信