博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
DevExpress,LayoutControl,TreeList,GridControl等
阅读量:6875 次
发布时间:2019-06-26

本文共 18232 字,大约阅读时间需要 60 分钟。

1.显示边框进行折叠

选择一个layoutControlGroupX 将其GroupBordersVisible设置成True,将TextVisiable=True

2. TreeList

2.1需要绑定的数据有ParentFieldName,KeyFieldName,

2.2.1.TeeList前面的连线
启动程序中添加DevExpress.BonusSkins.v13.1.dll
Main中进行注册

[STAThread]        static void Main(params String[] args)        {            DevExpress.UserSkins.BonusSkins.Register();            DevExpress.Skins.SkinManager.EnableFormSkins();            Application.EnableVisualStyles();            Application.SetCompatibleTextRenderingDefault(false);            if (args.Length>=1 && args[0]=="test")            {                Application.Run(new Form1());            }else            {                Application.Run(new F.Studio.DevExpressUI.frmLogin());            }        }
View Code

 需要设置LookAndFeel(比方Blue),

将UseDefaultLookAndFeel设置成False

//显示checkBox,并执行递归选择

treeList1.OptionsBehavior.AllowRecursiveNodeChecking = true;

treeList1.OptionsView.ShowCheckBoxes = true;
//参考:http://blog.sina.com.cn/s/blog_53b58e7c0101aclk.html

 

using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Text;using System.Linq;using System.Windows.Forms;using DevExpress.XtraEditors;using F.Studio.Prime.IService;using F.Studio.Prime.EFModel;using DevExpress.XtraTreeList.Nodes;namespace F.Studio.DevExpressUI{    public partial class frmFuncsConfigEdit : frmEditBase    {        public Sys_FuncsConfig ModifyConfig { get; set; }        public frmFuncsConfigEdit()        {            InitializeComponent();            this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Sizable;                        #region 配置TreeList            imageList1.Images.Add( Properties.Resources.folder);            imageList1.Images.Add( Properties.Resources.folder_open);            imageList1.Images.Add( Properties.Resources.func);            imageList1.Images.Add( Properties.Resources.tag_16x16);            imageList1.Images.Add( Properties.Resources.question_16x16);                      treeList1.StateImageList = imageList1;            treeList1.SelectImageList = imageList1;            treeList1.ColumnsImageList = imageList1;                      //显示checkBox,并执行递归选择                        treeList1.OptionsView.ShowCheckBoxes = true;            treeList1.OptionsBehavior.AllowIndeterminateCheckState = false;            treeList1.OptionsBehavior.AllowRecursiveNodeChecking = false;            treeList1.OptionsBehavior.Editable = false;                        treeList1.AfterCheckNode += (s, e) =>            {                Console.WriteLine(e.Node.SelectImageIndex);            };            treeList1.NodesReloaded += (s, e) =>            {                //到这里完成全部Node的挂接!                Console.WriteLine("NodesReloaded");                                SetTreeListCheckState();                treeList1.OptionsBehavior.AllowRecursiveNodeChecking = true;            };            treeList1.CreateCustomNode += (s, e) => {                var tag = e.Tag;                Console.WriteLine("CreateCustomNode");                            };            treeList1.NodeChanged += (s, e) => {                Console.WriteLine("NodeChanged");                          };            treeList1.FocusedNodeChanged += (s, e) => {                var list= treeList1.GetDataRecordByNode(e.Node);                               childBindingSource.DataSource = list;            };            #endregion                    }        public frmFuncsConfigEdit(Sys_FuncsConfig config):this()        {            sys_FuncsConfigBindingSource.DataSource = config;            IsModify = true;            ModifyConfig = config;           }        private void SetTreeListCheckState()        {            Queue
queue = new Queue
(); foreach (TreeListNode node in treeList1.Nodes) { queue.Enqueue(node); }; while (queue.Count > 0) { var node= queue.Dequeue(); var isChecked=(bool)node.GetValue("IsChecked"); node.Checked = isChecked; //treeList1.SetNodeCheckState(node, isChecked ? CheckState.Checked : CheckState.Unchecked, false); foreach (TreeListNode child in node.Nodes) { queue.Enqueue(child); } } } private void frmFuncsConfigEdit_Load(object sender, EventArgs e) { Func
> fun = () => { return SysResourceInfo.Build(); }; var list = InvokeService
>(fun); if (!IsModify) { sys_FuncsConfigBindingSource.AddNew(); } else//修改状态 { string wehre=string.Format("it.ConfigId={0}",ModifyConfig.ConfigId); var configItems= Fetch
().GetList(wehre, "it.RecId"); list.ForEach(item => { if (item.ResourceType == "目录") return; if (configItems.Any(ent => ent.ResourceId == item.FuncId)) { item.IsChecked = true; } }); } sysResourceInfoBindingSource.DataSource = list; Console.WriteLine(treeList1.AllNodesCount); } private void btnSave_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { foreach (TreeListNode node in treeList1.Nodes) { Console.WriteLine(node.ToString()); } } private void btnCancel_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { DialogResult = System.Windows.Forms.DialogResult.Cancel; } }}
View Code

 

using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Text;using System.Linq;using System.Windows.Forms;using DevExpress.XtraEditors;using F.Studio.Prime.IService;using F.Studio.Prime.EFModel;using DevExpress.XtraTreeList.Nodes;using F.Studio.Infrastructure;namespace F.Studio.DevExpressUI{    public partial class frmFuncsConfigEdit : frmEditBase    {        public Sys_FuncsConfig ModifyConfig { get; set; }        public frmFuncsConfigEdit()        {            InitializeComponent();            this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Sizable;                        #region 配置TreeList            imageList1.Images.Add( Properties.Resources.folder);            imageList1.Images.Add( Properties.Resources.folder_open);            imageList1.Images.Add( Properties.Resources.func);            imageList1.Images.Add( Properties.Resources.tag_16x16);            imageList1.Images.Add( Properties.Resources.question_16x16);                        treeList1.StateImageList = imageList1;            treeList1.SelectImageList = imageList1;            treeList1.ColumnsImageList = imageList1;                      //显示checkBox,并执行递归选择                        treeList1.OptionsView.ShowCheckBoxes = true;            treeList1.OptionsBehavior.AllowIndeterminateCheckState = false;            treeList1.OptionsBehavior.AllowRecursiveNodeChecking = true;            treeList1.OptionsBehavior.Editable = false;                                  treeList1.AfterCheckNode += (s, e) =>            {                treeList1.FocusedNode = e.Node;                Console.WriteLine("AfterCheckNode!");                var r = treeList1.GetDataRecordByNode(e.Node) as SysResourceInfo;                 r.IsChecked = e.Node.Checked;                treeList1.CloseEditor();               #region (废弃) 如果窗体取消选择,那么取消窗体下的按钮                //if (!e.Node.Checked)                //{                //    if (r.ResourceType == "窗体")                //    {                //        r.Buttons.ForEach(ent => ent.IsChecked = false);                //        buttonsBindingSource.ResetBindings(true);                //    }                //}               #endregion            };            treeList1.NodesReloaded += (s, e) =>            {                //到这里完成全部Node的挂接!                Console.WriteLine("NodesReloaded");                SetTreeListCheckState();                           };            treeList1.CreateCustomNode += (s, e) => {                //var tag = e.Tag;                //Console.WriteLine("CreateCustomNode");                            };            treeList1.NodeChanged += (s, e) => {                //Console.WriteLine("NodeChanged");                          };            treeList1.FocusedNodeChanged += (s, e) => {                var list= treeList1.GetDataRecordByNode(e.Node);                              buttonsBindingSource.DataSource = list;            };            buttonsBindingSource.CurrentItemChanged += (s, e) => {                //var btn= buttonsBindingSource.Current as SysButtonInfo;                //if (btn == null) return;                //Console.WriteLine("CurrentItemChanged:" + btn.IsChecked);            };            #endregion            repositoryItemCheckEdit1.CheckedChanged += (s, e) => {                Console.WriteLine("CheckedChanged:");                var btn= gridView1.GetFocusedRow() as SysButtonInfo;                var parent= btn.Parent as SysResourceInfo;                              if((s as CheckEdit).Checked)                {                    parent.Node.Checked = true;                                        }               gridView1.CloseEditor();                 gridView1.UpdateCurrentRow();             };        }        public frmFuncsConfigEdit(Sys_FuncsConfig config):this()        {            sys_FuncsConfigBindingSource.DataSource = config;            IsModify = true;            ModifyConfig = config;           }        private void SetTreeListCheckState()        {            Queue
queue = new Queue
(); foreach (TreeListNode node in treeList1.Nodes) { queue.Enqueue(node); }; while (queue.Count > 0) { var node= queue.Dequeue(); var obj= treeList1.GetDataRecordByNode(node) as SysResourceInfo; var isChecked=(bool)node.GetValue("IsChecked"); obj.Node = node;//建立引用 node.Checked = isChecked; if (isChecked) { var cur = node; while (cur.ParentNode != null) { var rnode = treeList1.GetDataRecordByNode(cur) as SysResourceInfo; Console.WriteLine(rnode.Title); cur.ParentNode.Checked = true; cur = cur.ParentNode; } } treeList1.SetNodeCheckState(node, isChecked ? CheckState.Checked : CheckState.Unchecked, false); foreach (TreeListNode child in node.Nodes) { queue.Enqueue(child); } } } ///
/// 同步接点状态到绑定数据源 /// private void SyncCheckState() { Queue
queue = new Queue
(); foreach (TreeListNode node in treeList1.Nodes) { queue.Enqueue(node); }; while (queue.Count > 0) { var node = queue.Dequeue(); var obj = treeList1.GetDataRecordByNode(node) as SysResourceInfo; obj.IsChecked = node.Checked; foreach (TreeListNode child in node.Nodes) { queue.Enqueue(child); } } } private void frmFuncsConfigEdit_Load(object sender, EventArgs e) { Func
> fun = () => { return SysResourceInfo.Build(); }; var list = InvokeService
>(fun); if (!IsModify) { sys_FuncsConfigBindingSource.AddNew(); } else//修改状态 { string wehre=string.Format("it.ConfigId={0}",ModifyConfig.ConfigId); var configItems= Fetch
().GetList(wehre, "it.RecId"); list.ForEach(item => { if (item.ResourceType == "目录") return; if (configItems.Any(ent => ent.ResourceId == item.FuncId)) { item.IsChecked = true; } //设置按钮 item.Buttons.ForEach(btn => { if (configItems.Any(ent1 => ent1.ResourceId == btn.FuncId)) { btn.IsChecked = true; } }); }); } sysResourceInfoBindingSource.DataSource = list; treeList1.ExpandAll(); //SetTreeListCheckState(); } private void btnSave_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { try { sys_FuncsConfigBindingSource.EndEdit(); sysResourceInfoBindingSource.EndEdit(); buttonsBindingSource.EndEdit(); gridView1.CloseEditor(); var ent = sys_FuncsConfigBindingSource.Current as Sys_FuncsConfig; if (string.IsNullOrWhiteSpace(ent.ConfigName)) throw new Exception("请提供配置名!"); var srv = ServiceLocator.Fetch
(); if (IsModify) { srv.Update(ent); } else { var newEnt = srv.Add(ent); ent.ConfigId = newEnt.ConfigId; base.NewRecord = newEnt; } #region 更新配置 SyncCheckState(); var res = (sysResourceInfoBindingSource.DataSource as List
).Where(entTmp=>entTmp.ResourceType!="目录").ToList(); #region(作废) 被"目录"类型节点递归选中的节点做额外处理 //var nodes = treeList1.GetAllCheckedNodes(); //nodes.ForEach(node => //{ // var resIt = treeList1.GetDataRecordByNode(node) as SysResourceInfo; // if (resIt.ResourceType != "目录") // { // resIt.IsChecked = true; // } //}); #endregion Action act = () => { var newResList = new List
(); foreach (var r in res) { var newRes = new Sys_FuncsConfigItems(); newRes.ResourceId = r.FuncId; newRes.ResourceType = r.ResourceType; newRes.ConfigId = ent.ConfigId; if (r.IsChecked.Value) { newResList.Add(newRes); } foreach (var btn in r.Buttons) { if (btn.IsChecked.Value) { var newBtnRes = new Sys_FuncsConfigItems(); newBtnRes.ResourceId = btn.FuncId; newBtnRes.ResourceType = btn.ResourceType; newBtnRes.ConfigId = ent.ConfigId; newResList.Add(newBtnRes); } } } ServiceLocator.Fetch
().SetConfigItems(newResList, ent); }; InvokeService(act); #endregion DialogResult = System.Windows.Forms.DialogResult.OK; } catch (Exception ex) { ErrMsg(ex.Message); } } private void btnCancel_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { DialogResult = System.Windows.Forms.DialogResult.Cancel; } }}
View Code

 展开关闭图标

imgList = new ImageList(this.components);            imgList.Images.Add(Properties.Resources.folder);            imgList.Images.Add(Properties.Resources.folder_open);            treeList1.SelectImageList = imgList;            treeList1.StateImageList = imgList;                        treeList1.AfterCollapse += (s, e) => {                e.Node.ImageIndex = 0;                e.Node.SelectImageIndex = 0;            };            treeList1.AfterExpand += (s, e) => {                e.Node.ImageIndex = 1;                e.Node.SelectImageIndex = 1;            };
View Code

 

 3.GridControl

 3.1.1添建按钮列->参考:http://www.cnblogs.com/zeroone/p/3534783.html

3.1.2 下拉框编辑->http://www.cnblogs.com/zeroone/p/3606224.html

 3.2 设置参考列:http://blog.csdn.net/nanchuan/article/details/7664070

gridView1.CustomColumnDisplayText += (s, e) =>            {                if (e.Column.FieldName == "FuncConfigId")                {                    var list = FuncsConfigLookUp.Value;                    if (list != null)                    {                        var it = list.FirstOrDefault(ent => ent.ConfigId == int.Parse(e.Value.ToString()));                        if (it != null) e.DisplayText = it.ConfigName;                    }                }            };
View Code

3.3 设置计算列,分组会总等

参考:http://blog.csdn.net/lenovouser/article/details/7405577

gridColumn1.UnboundType = DevExpress.Data.UnboundColumnType.Decimal;

gridColumn1.UnboundExpression = "[Amount] * ToDouble(SubString([CostPerUnit],0, CharIndex('(',[CostPerUnit])))";
gridView1.GroupSummary.Add(SummaryItemType.Sum, "gridColumn1", gridView1.Columns["gridColumn1"],"组计:{0}");
注:gridColumn1是一个未帮定列,另外需要开启gridView.OptionsView.ShowFooter=True

 

3.4判断gridControl 的那个列的单元格被双击

 

gridControl1.MouseDoubleClick += (s, e) =>            {                if (e.Button == System.Windows.Forms.MouseButtons.Left)                {                    GridHitInfo hInfo = gridView1.CalcHitInfo(new Point(e.X, e.Y));                    if (!hInfo.InRow) return; //确保点的是数据行而不是标头                                       var ent = qSymptomRepositoryItemBindingSource.Current as Q_SymptomRepositoryItem;                    if (ent == null) return;                    //hInfo.Column==null 标示点了行头                    if (hInfo.Column!=null && hInfo.Column.Caption == "图片")                    {                        var img=gridView1.GetFocusedValue() as Image;                        new frmPhotoDetail(img).ShowDialog();                        return;                    }                                       //双击其他标示修改                    btnModify.PerformClick();                                    }            };
View Code

3.5 启用滚动条 gridView1.OptionsView.ColumnAutoWidth = false;

 

4.窗体继承

 

4.1.如果显示设计时错误,需要把两个partial 类的父类都设置下

4.2.如果father是泛型类那么会一直显示设计时错误

4.3.父亲窗体中用From_Load 或重写了OnLoad时,里面不要写代码,如果要写需要加入if(!DesignMode){...}

4.4.在继承窗体上增加按钮,无法显示

5.样式与中文包

将zn-CN 复制到运行目录 执行下列代码

///         [STAThread]        static void Main(params String[] args)        {            System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("zh-CN");            DevExpress.UserSkins.BonusSkins.Register();            DevExpress.Skins.SkinManager.EnableFormSkins();            Application.EnableVisualStyles();            Application.SetCompatibleTextRenderingDefault(false);            if (args.Length >= 1 && args[0] == "test")            {                Application.Run(new Form1());            }            else            {                Application.Run(new F.Studio.DevExpressUI.frmLogin());            }        }
View Code

 

 6.DateEdit显示时间

DateEdit如果开启Vista模式并显示日期+时间模式 问题,以前没有涉及过,借机看一下,记录如下:

设置为Vista显示模式(如下图)

 

 参考 :http://www.cnblogs.com/xiaofengfeng/archive/2011/09/07/2169691.html

设置以下属性

dateEdit1.Properties.VistaDisplayMode = DevExpress.Utils.DefaultBoolean.True;
dateEdit1.Properties.VistaEditTime = DevExpress.Utils.DefaultBoolean.True;
设置显示长日期模式(日期+时间):
dateEdit1.Properties.DisplayFormat.FormatString="g"
dateEdit1.Properties.DisplayFormat.FormatType=DateTime
dateEdit1.Properties.EditFormat.FormatString="g"
dateEdit1.Properties.EditFormat.FormatType=DateTime
设置为Vista模式时,如果要显示日期+时间的长日期模式,还需要设置:
VistaTimeProperties.DisplayFormat
VistaTimeProperties.EditFormat

你可能感兴趣的文章
CentOS6.4内核升级, 2.6.*版本升级 Kernel 3.10.*
查看>>
8.27(文件权限管理 正则表达式)
查看>>
用 zabbix 监测 snmptrap 的主动告警功能
查看>>
HDU1717 小数化分数2
查看>>
delphi 导入excel
查看>>
Linux下 FTP 常见错误 500 530等错误解决方法
查看>>
oracle asm
查看>>
VC基于单文档opengl框架
查看>>
MySQL-proxy 读写分离
查看>>
win7 下面操作memcache
查看>>
BZOJ1037:[ZJOI2008]生日聚会Party(DP)
查看>>
openSUSE13.2安装ruby和rails
查看>>
python 高级函数
查看>>
F.Cards with Numbers
查看>>
Learn Python 004: string slicing
查看>>
简单入门Buffer
查看>>
【HDU】6110 路径交(2017百度之星) 线段树+RMQ-LCA+树链的交
查看>>
Java锁系列|Java锁体系(一)
查看>>
SDN第四次作业
查看>>
HTML5之本地存储SessionStorage
查看>>