DevExpres.XtraLayout控件运行时动态设置数据项
问题分析:
通常、我们使用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控件运行时动态设置数据项的更多相关文章
- DevExpres表格控件运行时动态设置表格列
本文是系列文章,陆续发表于电脑编程技巧与维护杂志. DevExpres产品是全球享有极高声誉的一流控件套包产品!国内典型用户包括:用友.金蝶.神州数码.工信部.中国石化.汉王科技等众多大中型科技型企业 ...
- JMeter非GUI方式运行时动态设置线程组及传参
http://blog.csdn.net/selingchen/article/details/48106517 在使用JMeter进行性能测试自动化时,可能会有如下需求: 1.指定运行多少线程,指定 ...
- JMeter命令行方式运行时动态设置线程数及其他属性(动态传参)
在使用JMeter进行性能测试时,以下情况经常出现: 1.测试过程中,指定运行的线程数.指定运行循环次数不断改变: 2.访问的目标地址发生改变,端口发生改变,需要改写脚本. 上面的问题在GUI中,直接 ...
- qtp 自动化测试--点滴 菜单没有了,有些控件运行时找不到
test项目页签下-没有了 菜单栏:file edit view insert 看不到了 1 解决:在startpage标签下-tool-option-点击 restore layout-确定 2 菜 ...
- C#设置鼠标在控件上面时,改变光标形状
//设置鼠标在控件上面时,改变光标形状 private void pictureBox_macroLogo_MouseHover(object sender, System.EventArgs e) ...
- ArcGIS Engine控件运行许可(转)
ArcGIS Engine控件运行许可 Runtime绑定: 在ArcGIS Engine10.0中,许可方式发生了一定的变化,ArcGis10有一个新的要求---runtime绑定.就是在任何A ...
- VC/MFC 当鼠标移到控件上时显示提示信息
VC/MFC 当鼠标移到控件上时显示提示信息 ToolTip是Win32中一个通用控件,MFC中为其生成了一个类CToolTipCtrl,总的说来其使用方法是较简单的,下面讲一下它的一般用法和高级用法 ...
- 使你的ActiveX控件执行时不弹出安全性提示(转载)
我们编写一个ActiveX控件在IE中运行,一般会弹出一个安全提示,如何避免这种情况?下面是我在参考前人的文章后,总结出“在浏览器中执行时不弹出警告的ActiveX控件”的两种编写方法,予以备忘.注意 ...
- Winform开发框架之客户关系管理系统(CRM)的开发总结系列4-Tab控件页面的动态加载
在前面介绍的几篇关于CRM系统的开发随笔中,里面都整合了多个页面的功能,包括多文档界面,以及客户相关信息的页面展示,这个模块就是利用DevExpress控件的XtraTabPage控件的动态加载实现的 ...
随机推荐
- How to: Hide the Ribbon in SharePoint 2010
转:http://blogs.msdn.com/b/sharepointdev/archive/2012/04/30/how-to-hide-the-ribbon-in-sharepoint-2010 ...
- 使用Action、Func和Lambda表达式
使用Action.Func和Lambda表达式 在.NET在,我们经常使用委托,委托的作用不必多说,在.NET 2.0之前,我们在使用委托之前,得自定义一个委托类型,再使用这个自定义的委托类型定义一个 ...
- 一步一步学Remoting系列文章
转自:http://www.cnblogs.com/lovecherry/archive/2005/05/24/161437.html (原创)一步一步学Remoting之一:从简单开始(原创)一步一 ...
- HDU 1907
博弈入门题吧. 把尼姆博弈推广到n堆,都是用异或运算.还有个总结的地方是,只要先手面对的是奇异局势,则胜负都掌握在后手.本题,题目要求是最后拿完的输,尼姆博弈是最后拿完的赢.但实际上优先权都掌握在后手 ...
- POJ-3207 Ikki's Story IV - Panda's Trick 2sat
题目链接:http://poj.org/problem?id=3207 题意:在一个圆圈上有n个点,现在用线把点两两连接起来,线只能在圈外或者圈内,现给出m个限制,第 i 个点和第 j 个点必须链接在 ...
- 表达式计算器(LL1文法)
LL(1)文法求算数表达式的值递归子程序法 分析过程: 表达式文法G[E]:E->E+T|E-T|TT->T*F|T/F|T%F|FF->N^F|NN->(E)|NUM|+NU ...
- hdu3394--Railway(点的双连通分量)
一个公园中有 n 个景点,景点之间通过无向的道路来连接,如果至少两个环公用一条路,路上的游客就会发生冲突:如果一条路不属于任何的环,这条路就没必要修 问,有多少路不必修,有多少路会发生冲突 每一个连通 ...
- oc学习之路----代理模式2-使用步骤
之前已经写过一个个人关于代理模式的一些看法,现在就来总结一下使用代理模式的步骤吧. 1.先搞清楚谁是谁的代理(delegate) ● 2.定义代理协议,协议名称的命名规范:控件类名 + Delegat ...
- 拍照返回的bitmap太小
private void doPhoto(int requestCode) { if(!Environment.getExternalStorageState().equals(Environment ...
- hdu 4635 Strongly connected(Tarjan)
做完后,看了解题报告,思路是一样的.我就直接粘过来吧 最终添加完边的图,肯定可以分成两个部X和Y,其中只有X到Y的边没有Y到X的边,那么要使得边数尽可能的多,则X部肯定是一个完全图,Y部也是,同时X部 ...