C#开发WinForm之DevExpress框架-(GridControll常见使⽤
⽅式)
C#开发WinForm之DevExpress框架⾥GridControll常见使⽤⽅式
DataConrol绑定数据
它的绑定数据的⽅式和TreeList很类似。新建Winfrom->拖拽⼀个DataControl控件到窗体⾥,点击Run Designer->弹出窗⼝⾥选中Columns,在这⾥⾯增加列,注意如果不设置Visible=fal,这⾥⾯设置的列都是将会显⽰的列。
创建Columns和Rows并绑定数据
1DataTable dt = new DataTable();
2 dt.Columns.Add("index");
3 dt.Columns.Add("uidItem");
4 dt.Columns.Add("uidItemRevision");
5 dt.Columns.Add("primaryTag");
6 dt.Columns.Add("natureOfItem");
7 dt.Columns.Add("itemId");
8
9 for (int i = 0; i < 100; i++)
10 {
11 DataRow dataRow = dt.NewRow();
12 dataRow["index"] = "" + i;
13 dataRow["uidItem"] = "" + i;
14 dataRow["uidItemRevision"] = "" + i;
15 dataRow["primaryTag"] = "" + i;
16 dataRow["natureOfItem"] = "" + i;
17 dataRow["itemId"] = "" + i;
18 dt.Rows.Add(dataRow);
19 }
idControl1.DataSource = null;
idControl1.DataSource = dt;
注意我们在Run Desinger⾥编辑的列是展⽰⽤的,⽽代码⾥dt.Columns.Add(“index”);添加的列属性,不是⽤于显⽰⽤的,只有列的字
段和Run Desinger⾥列的FieldName匹配时才显⽰。
1dt.Columns.Add("index");
2dataRow["index"] = "" + i;
这2个组成的是⾏列数据,注意是数据,⽤于绑定⽤的。
如果我们不在Run Desinger⾥⼿动添加列,想根据⾏列数据动态创建列的显⽰,只要设置好DataSource后,执⾏idView1.PopulateColumns();语句即可。
获得选中数据
有如下三种⽅式
第⼀种:根据⾏号和列属性值取单元格
1 //获得选中的⾏,如果是单选模式,则直接取第⼀个
2 int lectRow = gridView1.GetSelectedRows()[0];
3 //指定⾏和列属性名取单元格数据
4 string name = idView1.GetRowCellValue(lectRow, "uidItem").ToString();
第⼆种:根据绑定的数据(推荐)
1//获得选中的⾏,如果是单选模式,则直接取第⼀个
2int lectRow = gridView1.GetSelectedRows()[0];
3 //获得绑定的⾏数据
4 DataRow dataRow = gridView1.GetDataRow(lectRow);
5 //从绑定的⾏数据直接取数据
6 string uidItem = (string)dataRow["uidItem"];
7 string uidItemRevision = (string)dataRow["uidItemRevision"];
第三种:杂
获得选中单元格值,不是⾏值。
1 //获得选中单元格值
2 var obj = gridView1.FocudValue;
选中事件
选中gridController下的gridView,(gridController和gridView都是可选中的),选中后在属性⾯板下可看到gridView的属性和事件。
事件FocudRowChanged和FocudRowObjectChanged都会在gridView被选中时触发,任选其⼀即可。⽐如FocudRowObjectChanged的事件监听函数如下:
1private void Gridview1_FocudRowObjectChanged(object nder, DevExpress.XtraGrid.Views.Ba.FocudRowObjectChangedEventArgs e)
2{
3 //获得选中的⾏,如果是单选模式,则直接取第⼀个
4 int lectRow = gridView1.GetSelectedRows()[0];
5 //获得绑定的⾏数据
晒家
6 DataRow dataRow = gridView1.GetDataRow(lectRow);
7 //从绑定的⾏数据直接取数据
8 string uidItem = (string)dataRow["uidItem"];
9 string uidItemRevision = (string)dataRow["uidItemRevision"];
10 }
注意,有些⼈说SelectionChanged事件可以选中触发,我试了不可以。不知道是不是因为我将选中设为选中整个⾏的问题(idView1.FocusRectStyle = DevExpre 控制列显⽰顺序
this.btnOk.TabIndex = 1;
狐裘不暖锦衾薄对GridView的⼀些个性设置
参考DevExpress GridControl使⽤⽅法总结
如何隐藏GridControl的GroupPanel表头:设置Run Design->OptionsView->ShowGroupPanel 设置为:fal
如何解决单击记录整⾏选中的问题:View->OptionsBehavior->EditorShowMode 设置为:Click
形式教育论
如何解决GridControl记录能获取⽽没有显⽰出来的问题:gridView.populateColumns();//会将所有的绑定数据都显⽰出来
如何让⾏只能选择⽽不能编辑(或编辑某⼀单元格):
(1)、View->OptionsBehavior->EditorShowMode 设置为:Click
(2)、View->OptionsBehavior->Editable 设置为:fal
如何禁⽤GridControl中单击列弹出右键菜单:设置Run Design->OptionsMenu->EnableColumnMenu 设置为:fal
如何隐藏GridControl的GroupPanel表头:设置Run Design->OptionsView->ShowGroupPanel 设置为:fal
如何禁⽤GridControl中列头的过滤器:设置 Run Design->OptionsCustomization->AllowFilter 设置为:fal
如何显⽰⽔平滚动条:设置idView.OptionsView.ColumnAutoWidth = fal;
如何定位到第⼀条数据/记录:idView.MoveFirst()
如何定位到下⼀条数据/记录:idView.MoveNext()
如何定位到最后⼀条数据/记录:idView.MoveLast()
设置成⼀次选择⼀⾏,并且不能被编辑:
1
5//默认选中第⼀⾏
如何显⽰⾏号:
1
3//显⽰⾏的序号
4private void gridView1_CustomDrawRowIndicator(object nder, RowIndicatorCustomDrawEventArgs e)
5{
6if (e.Info.IsRowIndicator && e.RowHandle>=0)
7{
8 e.Info.DisplayText = (e.RowHandle + 1).ToString();
9}
10}
如何让各列头禁⽌移动:gridView1.OptionsCustomization.AllowColumnMoving = fal;
如何让各列头禁⽌排序:gridView1.OptionsCustomization.AllowSort = fal;
如何禁⽌各列头改变列宽:gridView1.OptionsCustomization.AllowColumnResizing = fal;
设某⼀列⽂字和标题局中显⽰ :
1gridView1.Columns[0].AppearanceHeader.TextOptions.HAlignment =DevExpress.Utils.HorzAlignment.Center;
2gridView1.Columns[0].AppearanceCell.TextOptions.HAlignment =DevExpress.Utils.HorzAlignment.Center;
分页
迎亚运GridControl控件分页很奇怪,他提供的DataSource就是⼀页数据,并不是我们常想的那样,把所有数据都提供给DataSource,根据参数配置,设置Step(每页显⽰多数),实现分页。所以要想实现分页功能就要在DataSouce数据源上下功能。
GridControl⾃带分页控件。
设置控件属性
设置idControl1.uEmbeddedNavigator = true,会显⽰出分页控件。在控件的属性⾯板上有个EmbeddedNavigator选项,在这⾥设置分页控件属性。
先设置Buttons选项,分页控件上有很多Button,有删除,编辑,上⼀页,⾸页,下⼀页,尾页等,有些是不需要的,可以在这⾥选中某个Button,然后设置为Visible=fal。⽐如
最终显⽰效果是
设置其它参数:
TextLocation=Center,
TextStringFormat="";//⾥⾯内容我们在代码⾥做。
其它就⽤默认即可。
设置控件ButtonClick事件
选中控件,在属性⾯板下找到EmbeddedNavigator选项下的ButtonClick,增加事件,如下
代码
总体思路是:根据总页数,每页显⽰条和当前页数,从allList截取出当前显⽰出的数据,然后添加到currentPageList集合⾥,然后再对currentPageList集合构造DataTable,将DataTable给DataSource。在上⼀页/下⼀页事件监听器中,根据按钮类型操作pageIndex,之后从前⾛⼀遍上⾯的流程
1public class TestVo{
2 /// <summary>
3 ///
4 /// </summary>
5 public string name{ get; t; }
6 /// <summary>我们的知青岁月
7 ///
8 /// </summary>
9 public string age{ get; t; }
10}
11
12//所有数据
13private List<TestVo> allList = new List<TestVo>();
14//页⾏数
15public int pagesize = 10;
16//当前页
17public int pageIndex = 1;
18//总页数
小女孩简笔画图片19public int pageCount;
20//选中的数据
21private List<TestVo> currentPageList = new List<TestVo>();
22//选中的数据经过处理放到DataTable⾥
23private DataTable dt;
24/// <summary>
25/// 初始化树信息
26 /// </summary>
27 private void LoadData()
28 {
29 dt = new DataTable();
30 dt.Columns.Add("name");
31 dt.Columns.Add("age");
32 calPage();
33 }
34/// <summary>
35/// 计算分页数据
上海体育学院分数线36 /// </summary>
37 private void calPage()
38 {
39 currentPageList.Add(new TestVo() { name="张三", age="12"});
40 currentPageList.Add(new TestVo() { name="李四", age="13"});
41 currentPageList.Add(new TestVo() { name="王五", age="10"});
微波炉怎么热牛奶42 currentPageList.Add(new TestVo() { name="⿇六", age="20"}); 43
44 int count = allList .Count;
45 pageCount = count / pagesize;
46 if(count % pagesize > 0)
47 {
48 pageCount++;
49 }
50 calCurrentPageList();
51 }
52
53/// <summary>
54/// 计算每页数据
55/// </summary>
56private void calCurrentPageList()
57{
58 dt.Clear();
59 currentPageList.Clear();
60
61 //记录获取开始数
62 int startIndex = (pageIndex - 1) * pagesize;
63 int endIndex = pageIndex * pagesize;
64 if(endIndex > allList .Count)
65 {
66 endIndex = allList .Count;
67 }
68 for (int i = startIndex; i < endIndex; i++)
69 {
70 TestVo testVo = allList [i];
71 currentPageList.Add(testVo );
72 }