问题分析:

通常、我们使用XtraLayout控件,是需要做以下的几个步骤来实现的:

1、  在窗体上拖拉一个 LayoutControl控件,设置它的填充属性;

2、  拖拉一些常规编辑控件到LayoutControl中去,这个时候我们会发现LayoutControl中除了增加了我们拖拉的常规编辑控件之后、还多了一些layoutControlItem组件;

3、  设置layoutControlItem的标签属性(text属性);

4、  设置我们拖拉的常规编辑控件的相关属性,如DataBindings数据源属性、可见属性、可用(Enable)属性、可用(Visible)属性等;

对于以上问题,1和2是很简单的,我们直接在设计器中拖拉一下控件,然后命名它们就可以了。为了后面程序的方便,我们这里给定一个规则:LayoutControlItem组件我们命名时,以某一个特定的字符串作为前缀,后面加上数据表的字段名称。在我们给出的示例项目中,我们以“Lab_”作为名字的前缀,例如对于字段“FieldName”对应的LayoutControlItem,我们命名为 “Lab_ FieldName”。

接下来,我们用代码实现对这些LayoutControlItem的属性根据我们在数据字典中的设置进行赋值即可。

具体代码实现:(限于篇幅、这里我只给出ComboBox控件的部分代码,更多代码请查阅示例项目源码,不便之处请见谅。)

1、  设置LayoutControlItem控件的Caption属性以及相关参数的方法:

……

case "ComboBox":

{

if ((lc.Items[itemindex] as DevExpress.XtraLayout.LayoutControlItem).Control is DevExpress.XtraEditors.ComboBoxEdit)

{

……

if (QueryListStr != "")

{

if ((QueryListStr.ToLower().Contains("select")) && (QueryListStr.ToLower().Contains("from")))//如果数据字典中设置的是SQL查询语句,则执行之读取相应的查询表数据;

{

try

{

string sqltxt = (QueryListStr);

dtvalue = ExecSqlQuery(sqltxt);

}

catch (Exception msg)

{

throw new Exception("执行SQL语句错误[" + QueryListStr + "]" + msg.Message.ToString());

}

cb.Properties.Items.Clear();

bool isHasEmptyValue = false;

for (int k = 0; k < dtvalue.Rows.Count; k++)

{//把读取到的查询表数据添加到下拉控件的列表中;

cb.Properties.Items.Add(dtvalue.Rows[k][0].ToString());

if (dtvalue.Rows[k][0].ToString().Trim() == string.Empty) isHasEmptyValue = true;

}

if (! isHasEmptyValue) cb.Properties.Items.Add(string.Empty);

}

……

2、    接下来设置控件的DataBindingSource数据源,这是LayoutControlItem控件是否能正确显示数据的关键方法。

p = c.GetType().GetProperty(PropertyType[i]);//逐一尝试得到控件的属性类型;

if (p == null) continue;//如果没有能够获取,说明该控件不具备相应的属性,则继续尝试下一组属性;

c.DataBindings.Clear();//如果取得了对应的属性,则先清除原有的默认设置

c.DataBindings.Add(PropertyType[i], dt, FieldName);//根据数据字典的设置对控件的属性进行设置。

好了,到此,我们已经准备好了必要的方法,要调用这些对一个LayoutControl进行设置,我们只需在任何我们需要的地方调用我们写好的方法即可:

LFH.Function.FuncLayoutControl.SetFieldLabel("Lab_", layoutControl1, MyDT, DevExpress.Utils.HorzAlignment.Near);

LFH.Function.FuncLayoutControl.SetLayoutDataBind(layoutControl1, myBS, "Lab_");

附图:在运行期间进行读写模式、只读模式、隐藏控件三种模式下的程序界面图。

源码不在这里贴了、有兴趣的朋友下载了自己看吧。

http://files.cnblogs.com/HebiZiyu/%E7%A4%BA%E4%BE%8B%E9%A1%B9%E7%9B%AE%E6%BA%90%E7%A0%81.rar

DevExpres.XtraLayout控件运行时动态设置数据项的更多相关文章

  1. DevExpres表格控件运行时动态设置表格列

    本文是系列文章,陆续发表于电脑编程技巧与维护杂志. DevExpres产品是全球享有极高声誉的一流控件套包产品!国内典型用户包括:用友.金蝶.神州数码.工信部.中国石化.汉王科技等众多大中型科技型企业 ...

  2. JMeter非GUI方式运行时动态设置线程组及传参

    http://blog.csdn.net/selingchen/article/details/48106517 在使用JMeter进行性能测试自动化时,可能会有如下需求: 1.指定运行多少线程,指定 ...

  3. JMeter命令行方式运行时动态设置线程数及其他属性(动态传参)

    在使用JMeter进行性能测试时,以下情况经常出现: 1.测试过程中,指定运行的线程数.指定运行循环次数不断改变: 2.访问的目标地址发生改变,端口发生改变,需要改写脚本. 上面的问题在GUI中,直接 ...

  4. qtp 自动化测试--点滴 菜单没有了,有些控件运行时找不到

    test项目页签下-没有了 菜单栏:file edit view insert 看不到了 1 解决:在startpage标签下-tool-option-点击 restore layout-确定 2 菜 ...

  5. C#设置鼠标在控件上面时,改变光标形状

    //设置鼠标在控件上面时,改变光标形状 private void pictureBox_macroLogo_MouseHover(object sender, System.EventArgs e) ...

  6. ArcGIS Engine控件运行许可(转)

    ArcGIS Engine控件运行许可   Runtime绑定: 在ArcGIS Engine10.0中,许可方式发生了一定的变化,ArcGis10有一个新的要求---runtime绑定.就是在任何A ...

  7. VC/MFC 当鼠标移到控件上时显示提示信息

    VC/MFC 当鼠标移到控件上时显示提示信息 ToolTip是Win32中一个通用控件,MFC中为其生成了一个类CToolTipCtrl,总的说来其使用方法是较简单的,下面讲一下它的一般用法和高级用法 ...

  8. 使你的ActiveX控件执行时不弹出安全性提示(转载)

    我们编写一个ActiveX控件在IE中运行,一般会弹出一个安全提示,如何避免这种情况?下面是我在参考前人的文章后,总结出“在浏览器中执行时不弹出警告的ActiveX控件”的两种编写方法,予以备忘.注意 ...

  9. Winform开发框架之客户关系管理系统(CRM)的开发总结系列4-Tab控件页面的动态加载

    在前面介绍的几篇关于CRM系统的开发随笔中,里面都整合了多个页面的功能,包括多文档界面,以及客户相关信息的页面展示,这个模块就是利用DevExpress控件的XtraTabPage控件的动态加载实现的 ...

随机推荐

  1. C# 操作 Word 修改word的高级属性中的自定义属性2

    word的类库使用的是word2007版本的类库,类库信息见下面图片,折腾了半天,终于找到入口,网上 很多说的添加或者修改word的高级属性中的自定义属性都是错误的,感觉都是在copy网上的代码,自己 ...

  2. android中如何实现离线缓存

    离线缓存就是在网络畅通的情况下将从服务器收到的数据保存到本地,当网络断开之后直接读取本地文件中的数据. 将网络数据保存到本地: 你可以自己写一个保存数据成本地文件的方法,保存在android系统的任意 ...

  3. net 内存泄露和内存溢出

    一直以来都对内存泄露和内存溢出理解的不是很深刻.在网上看到了几篇文章,于是整理了一下自己对内存泄露和内存溢出的理解. 一.概念 内存溢出:指程序在运行的过程中,程序对内存的需求超过了超过了计算机分配给 ...

  4. WCF入门介绍

    内容介绍 1.WCF是什么? 2.WCF能干什么? 3.WCF与以往的分布式技术有何区别? 一.WCF是什么?     比较贴近官方的说法是:WCF(原代号为Indigo)是一个用于创建和运行分布式系 ...

  5. nyoj 168 房间安排(区间覆盖)

    房间安排 时间限制:3000 ms  |  内存限制:65535 KB 难度:2   描述 2010年上海世界博览会(Expo2010),是第41届世界博览会.于2010年5月1日至10月31日期间, ...

  6. redis整合spring @Bean写法

    jedis是一款java连接redis的客户端,spring基于jedis进行了封装,提供了简洁的操作redis的方法. 使用maven进行管理jar包之间的依赖: <dependency> ...

  7. 第三步 用Jena自定义完成数据库到RDF的映射

    第三步 用Jena自定义完成数据库到RDF的映射 2013年10月17日 8:53:27 这一步用Jena编程,终于能做点有技术含量的事情了.这个工作计划本周内完成,下周一好给老师一个交待. 目标:把 ...

  8. 【面试虐菜】—— Oracle中CHAR、VARCHAR的区别

    1.CHAR. CHAR存储定长数据很方便,CHAR字段上的索引效率级高,比如定义char(10),那么不论你存储的数据是否达到了10个字节,都要占去10个字节的空间,不足的自动用空格填充,所以在读取 ...

  9. Hadoop-2.2.0中文文档——MapReduce 下一代 -——集群配置

    目的 这份文档描写叙述了怎样安装.配置和管理从几个节点到有数千个节点的Hadoop集群. 玩的话,你可能想先在单机上安装.(看单节点配置). 准备 从Apache镜像上下载一个Hadoop的稳定版本号 ...

  10. 在其它路径新建cocos2d-x项目

    打开vs2010程序,然后选择“文件—新建—项目”,如图 改了一下位置,放在D:\Program Files\cocos2d-x\ ,确定 然后点下一步 这个程序不需要物理引擎,所以可以把上面红色的圈 ...