这几天学学Dev的TreeList和GridControl的使用,写下自己觉得还有用的部分.
1. 首先是Dev TreeList的使用:
既然说到是TreeList,那它的结构就是树的结构:一个父节点,多个子节.如果要生成如下图的一个TreeList
我们必须要知道子节点的主键和它父节点的主键,
如果说大星系的编码为1050,小一点的星系(就像我们的太阳系)的编码是11101-20,行星的编码是BFxxx,那么,上图在DataTable中的形式如下:
ID(子节点主键)
PID(父节点主键)
1050(银河系)
NULL
11101-20(太阳系)
1050
11101-20
BF1(水星)
11101-20
BF2(木星)
11101-20
BF3(土星)
11101-20
BF4(金星)
11101-20
BF5(地球)
所以,如果DataTable的形式如此,则只需对TreeList的属性进行如下设置即可:
而在界面上显示的文字,那可以在DataTable另加一列(点击TreeList控件,按下F4,在属性菜单上打开”Run Designer”,新增一列(在此我将这列命名为” DES”,描述为”我们的宇宙”)
ID(子节点主键)
PID(父节点主键)
DES(我们的宇宙)
1050
NULL
银河系
11101-20
1050
太阳系
11101-20
BF1
水星
11101-20
BF2
木星
11101-20
BF3
土星
11101-20
BF4
金星
11101-20
BF5
地球
这样,文字就会显示在界面上了.
显示不是最终的结果,用户还会对它进行操作,这就涉及到了你如何判断用户选择了哪个节点呢?
private void TreeList1_FocusedNodeChanged(object sender, DevExpress.XtraTreeList.FocusedNodeChangedEventArgs e){
object obj = TreeList1.FocusedNode.GetValue(columnIndex);
}
这个事件当你选中节点发生变化时触发,而TreeList1.FocusedNode.GetValue(columnIndex)方法是获取你所选中节点的第columnIndex位置值.因而,这一个FocusedNodeChanged的事件和这个.FocusedNode.GetValue(columnIndex)方法对付一般的需求也就足够了.当然,TreeList提供了很多方法,比如判读是否是叶子节点的方法:HasChild等.
说到子节点的主键,我倒还想起DataTable的排序,虽然挺简单的 :
dtSource.DefaultView.Sort = “"filedName1,filedName2,F_filedName3”;
DataTable dtBP = dtSource.DefaultView.ToTable();
下一个来谈谈Dev gridControl(我将gridControl简写为gc,GridView简写为gv吧):
首先,当然是将数据源绑定到gc上( gc.DataSource = datatable;),当我点击某一行时,我要获取该行,那么(DataRow dr = gvUser.GetFocusedDataRow();//返回结果的操作和对datarow相同) ;而要弄出下面这样的效果
那很简单,打开视图设计器
点击”Run Designer”,进入后点击View,然后找到
再
奇行的设置和EvenRow的设置相似.又例如要设置行号,则这样
点击
按下F4,在属性框中选择事件一栏,选择(CustomDrawRowIndicator双击)
在生成的方法中添加代码,如:
private void gv_CustomDrawRowIndicator(object sender, DevExpress.XtraGrid.Views.Grid.RowIndicatorCustomDrawEventArgs e)
{
if (e.Info.IsRowIndicator && e.RowHandle >= 0)
{
e.Info.DisplayText = (e.RowHandle + 1).ToString();
}
}
即可,别忘记了,要是这里不设置,行号是出不来的
.
有的时候,在GridView界面上,我们不需要用户输入,而希望用户选择,那么,我们可以这样设置:打开”视图设计器”->点击”Run Designer”->点击”Columns”->点击要让用户选择的列,再:
点击ColumnEdit右侧的下拉框
选择”repositoryItemGridLookUpEdit”控件.repositoryItemGridLookUpEdit控件和GridLookUpEdit的操作一样,例如数据绑定:
this.repositoryItemGridLookUpEdit1.ValueMember = "fieldName1";
this.repositoryItemGridLookUpEdit1.DisplayMember = "fieldName2";
this.repositoryItemGridLookUpEdit1.DataSource = datatable;
这些你可能要问”要是我要显示的数据不为空,那它要怎么显示在界面上?”呵呵,这个么不用着急,不是有这个嘛: .ValueMember,只要它的值和绑定gc的表此列字段名相同即可,显示你就不用担心了.
另外,有些时候,我既可以在GridView的cell中输入文本,又希望我点击时可以触发一个事件(例如调用另一个界面,从那里获取数据填入到这个cell中), 那处理的方式和” repositoryItemGridLookUpEdit”有些类似,不过这些选的是”ButtonEdit”了.它是如何显示用户不必知道,使用方法和没有选它时一样,只不过它多了个按钮,而这个按钮的使用方法和一般的按钮又是一样的了.