DevExpress中GridControl的使用笔记(转)
</h2>
<div class="postbody">
转自:https://www.jianshu.com/p/badc1d2f0841
注:练习例子为: DxApplication1 -> XtraForm1 , 例子上传到本博中 2019.4.22
Content
- [Level 1:基本](#Level 1:基本)
- [Level 2:列名](#Level 2:列名)
- [Level 3:格式化显示](#Level 3:格式化显示)
- [Level 4:自定义显示](#Level 4:自定义显示)
- [Level 5:分组](#Level 5:分组)
- [Level 6:汇总](#Level 6:汇总)
- [Level 7:显示行号](#Level 7:显示行号)
- [Level 8:点击事件](#Level 8:点击事件)
- [Level 9:自定义绘制](#Level 9:自定义绘制)
- [Level 10:Cell中的控](#Level 10:Cell中的控)
- [Level 11:BandedGridView](#Level 11:BandedGridView)
- [Level 12:Cell中的控件2](#Level 12:Cell中的控件2)
- [Level 13:主从表(分层表)](#Level 13:主从表(分层表))
Level 1:基本
代码:
private void Form1_Load(object sender, EventArgs e) { BindDataSource(InitDt()); }
<span class="hljs-function"><span class="hljs-keyword"><span class="hljs-function"><span class="hljs-keyword">private</span> DataTable </span><span class="hljs-title"><span class="hljs-function"><span class="hljs-title">InitDt</span></span><span class="hljs-params"><span class="hljs-function"><span class="hljs-params">()</span>
</span>{
DataTable dt = <span class="hljs-keyword"><span class="hljs-keyword">new</span> DataTable(<span class="hljs-string"><span class="hljs-string">"个人简历"</span>);
dt.Columns.Add(<span class="hljs-string"><span class="hljs-string">"id"</span>, typeof(<span class="hljs-keyword"><span class="hljs-keyword">int</span>));
dt.Columns.Add(<span class="hljs-string"><span class="hljs-string">"name"</span>, typeof(<span class="hljs-built_in"><span class="hljs-built_in">string</span>));
dt.Columns.Add(<span class="hljs-string"><span class="hljs-string">"sex"</span>, typeof(<span class="hljs-keyword"><span class="hljs-keyword">int</span>));
dt.Columns.Add(<span class="hljs-string"><span class="hljs-string">"address"</span>, typeof(<span class="hljs-built_in"><span class="hljs-built_in">string</span>));
dt.Columns.Add(<span class="hljs-string"><span class="hljs-string">"aihao"</span>, typeof(<span class="hljs-built_in"><span class="hljs-built_in">string</span>));
dt.Columns.Add(<span class="hljs-string"><span class="hljs-string">"phone"</span>, typeof(<span class="hljs-built_in"><span class="hljs-built_in">string</span>));
dt.Rows.Add(<span class="hljs-keyword"><span class="hljs-keyword">new</span> object[] { <span class="hljs-number"><span class="hljs-number">1</span>, <span class="hljs-string"><span class="hljs-string">"张三"</span>, <span class="hljs-number"><span class="hljs-number">1</span>, <span class="hljs-string"><span class="hljs-string">"东大街6号"</span>, <span class="hljs-string"><span class="hljs-string">"看书"</span>, <span class="hljs-string"><span class="hljs-string">"12345678910"</span>});
dt.Rows.Add(<span class="hljs-keyword"><span class="hljs-keyword">new</span> object[] { <span class="hljs-number"><span class="hljs-number">1</span>, <span class="hljs-string"><span class="hljs-string">"王五"</span>, <span class="hljs-number"><span class="hljs-number">0</span>, <span class="hljs-string"><span class="hljs-string">"西大街2号"</span>, <span class="hljs-string"><span class="hljs-string">"上网,游戏"</span>, <span class="hljs-string"><span class="hljs-string">""</span> });
dt.Rows.Add(<span class="hljs-keyword"><span class="hljs-keyword">new</span> object[] { <span class="hljs-number"><span class="hljs-number">1</span>, <span class="hljs-string"><span class="hljs-string">"李四"</span>, <span class="hljs-number"><span class="hljs-number">1</span>, <span class="hljs-string"><span class="hljs-string">"南大街3号"</span>, <span class="hljs-string"><span class="hljs-string">"上网,逛街"</span>, <span class="hljs-string"><span class="hljs-string">""</span> });
dt.Rows.Add(<span class="hljs-keyword"><span class="hljs-keyword">new</span> object[] { <span class="hljs-number"><span class="hljs-number">1</span>, <span class="hljs-string"><span class="hljs-string">"钱八"</span>, <span class="hljs-number"><span class="hljs-number">0</span>, <span class="hljs-string"><span class="hljs-string">"北大街5号"</span>, <span class="hljs-string"><span class="hljs-string">"上网,逛街,看书,游戏"</span>, <span class="hljs-string"><span class="hljs-string">""</span> });
dt.Rows.Add(<span class="hljs-keyword"><span class="hljs-keyword">new</span> object[] { <span class="hljs-number"><span class="hljs-number">1</span>, <span class="hljs-string"><span class="hljs-string">"赵九"</span>, <span class="hljs-number"><span class="hljs-number">1</span>, <span class="hljs-string"><span class="hljs-string">"中大街1号"</span>, <span class="hljs-string"><span class="hljs-string">"看书,逛街,游戏"</span>, <span class="hljs-string"><span class="hljs-string">""</span>});
<span class="hljs-keyword"><span class="hljs-keyword">return</span> dt;
}
<span class="hljs-function"><span class="hljs-keyword"><span class="hljs-function"><span class="hljs-keyword">private</span> </span><span class="hljs-keyword"><span class="hljs-function"><span class="hljs-keyword">void</span> </span><span class="hljs-title"><span class="hljs-function"><span class="hljs-title">BindDataSource</span></span><span class="hljs-params"><span class="hljs-function"><span class="hljs-params">(DataTable dt)</span>
</span>{
<span class="hljs-comment"><span class="hljs-comment">//绑定DataTable </span>
gridControl1.DataSource = dt;
}
效果:
Level 2:列名
设置:
效果:
Level 3:格式化显示
代码:
private DataTable InitDt() { DataTable dt = new DataTable("个人简历"); dt.Columns.Add("id", typeof(int)); dt.Columns.Add("name", typeof(string)); dt.Columns.Add("sex", typeof(int)); dt.Columns.Add("address", typeof(string)); dt.Columns.Add("aihao", typeof(string)); dt.Columns.Add("phone", typeof(string));
dt.Columns.Add(<span class="hljs-string"><span class="hljs-string">"data"</span>, typeof(decimal));
dt.Columns.Add(<span class="hljs-string"><span class="hljs-string">"time"</span>, typeof(DateTime));
dt.Columns.Add(<span class="hljs-string"><span class="hljs-string">"custom"</span>, typeof(<span class="hljs-built_in"><span class="hljs-built_in">string</span>));
dt.Rows.Add(<span class="hljs-keyword"><span class="hljs-keyword">new</span> object[] { <span class="hljs-number"><span class="hljs-number">1</span>, <span class="hljs-string"><span class="hljs-string">"张三"</span>, <span class="hljs-number"><span class="hljs-number">1</span>, <span class="hljs-string"><span class="hljs-string">"东大街6号"</span>, <span class="hljs-string"><span class="hljs-string">"看书"</span>, <span class="hljs-string"><span class="hljs-string">"12345678910"</span>,<span class="hljs-number"><span class="hljs-number">12</span>,<span class="hljs-string"><span class="hljs-string">"2018/4/26"</span>,<span class="hljs-string"><span class="hljs-string">"data"</span>});
dt.Rows.Add(<span class="hljs-keyword"><span class="hljs-keyword">new</span> object[] { <span class="hljs-number"><span class="hljs-number">1</span>, <span class="hljs-string"><span class="hljs-string">"王五"</span>, <span class="hljs-number"><span class="hljs-number">0</span>, <span class="hljs-string"><span class="hljs-string">"西大街2号"</span>, <span class="hljs-string"><span class="hljs-string">"上网,游戏"</span>, <span class="hljs-string"><span class="hljs-string">"12315"</span>, <span class="hljs-number"><span class="hljs-number">23333</span>, <span class="hljs-string"><span class="hljs-string">"2018/4/26"</span>, <span class="hljs-string"><span class="hljs-string">"test"</span> });
dt.Rows.Add(<span class="hljs-keyword"><span class="hljs-keyword">new</span> object[] { <span class="hljs-number"><span class="hljs-number">1</span>, <span class="hljs-string"><span class="hljs-string">"李四"</span>, <span class="hljs-number"><span class="hljs-number">1</span>, <span class="hljs-string"><span class="hljs-string">"南大街3号"</span>, <span class="hljs-string"><span class="hljs-string">"上网,逛街"</span>, <span class="hljs-string"><span class="hljs-string">""</span>, <span class="hljs-number"><span class="hljs-number">12.345</span>, <span class="hljs-string"><span class="hljs-string">"2018/4/26"</span>, <span class="hljs-string"><span class="hljs-string">""</span> });
dt.Rows.Add(<span class="hljs-keyword"><span class="hljs-keyword">new</span> object[] { <span class="hljs-number"><span class="hljs-number">1</span>, <span class="hljs-string"><span class="hljs-string">"钱八"</span>, <span class="hljs-number"><span class="hljs-number">0</span>, <span class="hljs-string"><span class="hljs-string">"北大街5号"</span>, <span class="hljs-string"><span class="hljs-string">"上网,逛街,看书,游戏"</span>, <span class="hljs-string"><span class="hljs-string">""</span>, <span class="hljs-number"><span class="hljs-number">0.123</span>, <span class="hljs-string"><span class="hljs-string">"2018/4/26"</span>, <span class="hljs-string"><span class="hljs-string">""</span> });
dt.Rows.Add(<span class="hljs-keyword"><span class="hljs-keyword">new</span> object[] { <span class="hljs-number"><span class="hljs-number">1</span>, <span class="hljs-string"><span class="hljs-string">"赵九"</span>, <span class="hljs-number"><span class="hljs-number">1</span>, <span class="hljs-string"><span class="hljs-string">"中大街1号"</span>, <span class="hljs-string"><span class="hljs-string">"看书,逛街,游戏"</span>, <span class="hljs-string"><span class="hljs-string">""</span>, <span class="hljs-number"><span class="hljs-number">3.1415926</span>, <span class="hljs-string"><span class="hljs-string">"2018/4/26"</span>, <span class="hljs-string"><span class="hljs-string">""</span> });
<span class="hljs-keyword"><span class="hljs-keyword">return</span> dt;
}
设置:
效果:
Tips:
1、gridControl的每一列原始数据是Value,但是显示数据是 DisplayText,默认DisplayText的值即是Value通过DisplayFormat转换之后的值。
2、 gridControl下的事件一般是包含表格GridView切换,点击,更改的事件,用的不多;每一个GridView下的事件包含行列处理,菜单显示,分组排序等事件,我们常用。(所有在使用事件时,一定要明确是control事件还是view事件)
Level 4:自定义显示
代码:
private void gridView1_CustomColumnDisplayText(object sender, DevExpress.XtraGrid.Views.Base.CustomColumnDisplayTextEventArgs e) { if (e.Column.FieldName == "sex") { switch (e.Value.ToString().Trim()) { case "1": e.DisplayText = "男"; break; case "0": e.DisplayText = "女"; break; default: e.DisplayText = ""; break; }} }
效果:
Level 5:分组
按照性别进行分组:
效果:
Level 6:汇总
设置:
1、显示面板
2、汇总项设置
效果:
Level 7:显示行号
设置:
代码:
效果:
Level 8:点击事件
private void gridView1_RowCellClick(object sender, DevExpress.XtraGrid.Views.Grid.RowCellClickEventArgs e) { if (e.Button == MouseButtons.Left) { Console.WriteLine("Button:MouseButtons.Left"); }
<span class="hljs-keyword"><span class="hljs-keyword">if</span> (e.Clicks == <span class="hljs-number"><span class="hljs-number">2</span>)
{
Console.WriteLine(<span class="hljs-string"><span class="hljs-string">"Clicks:2"</span>);
}
<span class="hljs-keyword"><span class="hljs-keyword">if</span> (e.Delta > <span class="hljs-number"><span class="hljs-number">0</span>)
{
Console.WriteLine(<span class="hljs-string"><span class="hljs-string">"Delta > 0"</span>);
}
<span class="hljs-keyword"><span class="hljs-keyword">if</span> (e.X > <span class="hljs-number"><span class="hljs-number">0</span> && e.Y ><span class="hljs-number"><span class="hljs-number">0</span>)
{
Console.WriteLine(<span class="hljs-string"><span class="hljs-string">"Pos:({0},{1})"</span>,e.X,e.Y);
}
<span class="hljs-keyword"><span class="hljs-keyword">if</span> (e.RowHandle > <span class="hljs-number"><span class="hljs-number">0</span>)
{
Console.WriteLine(<span class="hljs-string"><span class="hljs-string">"Row:{0}"</span>,e.RowHandle);
}
<span class="hljs-keyword"><span class="hljs-keyword">if</span> (e.CellValue != <span class="hljs-keyword"><span class="hljs-keyword">null</span>)
{
Console.WriteLine(<span class="hljs-string"><span class="hljs-string">"CellValue:{0}"</span>,e.CellValue);
}
<span class="hljs-keyword"><span class="hljs-keyword">if</span> (e.Column != <span class="hljs-keyword"><span class="hljs-keyword">null</span>)
{
Console.WriteLine(<span class="hljs-string"><span class="hljs-string">"Column:{0}"</span>,e.Column.ToString());
}
}
Level 9:自定义绘制
代码:
private void gridView1_CustomDrawCell(object sender, DevExpress.XtraGrid.Views.Base.RowCellCustomDrawEventArgs e) { if (e.Column.FieldName.Equals("data")) { GridCellInfo cellInfo = e.Cell as GridCellInfo; if (cellInfo.IsDataCell ) { if (double.Parse(cellInfo.CellValue.ToString()) < 1) { e.Appearance.BackColor = Color.OrangeRed; } else if (double.Parse(cellInfo.CellValue.ToString()) < 100) { e.Appearance.BackColor = Color.YellowGreen; } else { e.Appearance.BackColor = Color.Gold;} } } }
效果:
Level 10:Cell中的控件
设置:
点开ColumnEdit选项,设置选中时数据的类型和值,还可设置灰色和未选中状态的数据。
效果:
Level 11:BandedGridView
转换为BandedGridView:
设置Bands:
效果:
Level 12:Cell中的控件2
A1、添加按钮控件
1、新增一个无绑定的列
2、ColumnEdit选择repositoryItemButtonEdit
3、选择Button项
4、添加新项,修改Caption,并选择Kind为Glyph
5、修改TestEditStyle为HideTextEditor
6、选择In-place Editor Repository
,找到新添加的按钮,选择ButtonClick
事件
7、代码
private void repositoryItemButtonEdit1_ButtonClick(object sender, DevExpress.XtraEditors.Controls.ButtonPressedEventArgs e) { Console.WriteLine("Row:{0},Index:{1}", gridView1.GetFocusedDataSourceRowIndex(), e.Button.Index);
<span class="hljs-keyword"><span class="hljs-keyword">if</span> (e.Button.Index == <span class="hljs-number"><span class="hljs-number">0</span>)<span class="hljs-comment"><span class="hljs-comment">//删除按钮</span>
{
table.Rows.RemoveAt(gridView1.GetFocusedDataSourceRowIndex());
}
<span class="hljs-keyword"><span class="hljs-keyword">else</span><span class="hljs-comment"><span class="hljs-comment">//编辑按钮</span>
{
MessageBox.Show(<span class="hljs-string"><span class="hljs-string">"编辑 Index:"</span> + e.Button.Index);
}
}
效果:
A2、另一种按钮控件
和上一种方式一样,主要区别为:
* 选择一个绑定了数据的列
- 只添加一个按钮
- 并选择TestEditStyle为
DisableTextEditor
效果:
A3、各种弹出选项框:
Level 13:主从表(分层表)
待续......
小礼物走一走,来简书