(CumulativetyNO.169)
DevExpres.XtraLayout控件运行时动态设置数据项
——DevExpressForVS.Net高级技巧系列(二)
李福红
(河南省鹤壁理工学校(原鹤壁工贸学校),河南鹤壁458030)
摘要:DevExress控件是VS.net开发中应用最广、效果最出众的控件包之一,文章尝试用具体实例介绍了DevExress控件的一些高级用法。
关键词:DevExpress控件;运行时动态设置;XtaLayout技巧中图分类号:TP317 文献标识码:A文章编号:1009-2374(2010)34-0070-02
DevExpres产品是全球享有极高声誉的一流控件套包产品。其中的XtraLayoutControl可以帮助我们快速的创建漂亮的界面,从控件的自动排版到分辨率独立,XtraLayoutControl提供一套全面的表单设计特征集。XtraLayoutControl动态的缩减用户界面修改的时间,因而缩减重新编译程序的昂贵成本。XtraLayoutControl目前是市场上唯一的一套允许最终用户在运行时通过简单的拖放自定义界面布局的组件。美中不足的是、该控件包自带的演示中、没有运行时配置(动态设置)控件属性的介绍,这对于很多软件开发工作来说,很不方便,本人结合自己教学和开发实例,在这里就相关控件的使用做一介绍,希望对读者朋友能够有所助益。
开发环境:VS2008C#,Access,DevExpress控件包V9.1.4。
示例软件运行环境:.netframework2.0,windowsxp/windows2003/windows7。
1 问题分析
通常,我们使用XtraLayout控件,是需要做以下几个步骤来实现的:
(1)在窗体上拖拉一个LayoutControl控件,设置它的填充属性;
(2)拖拉一些常规编辑控件到LayoutControl中去,这个时候我们会发现LayoutControl中除了增加了我们拖拉的常规编辑控件之后、还多了一些layoutControlItem组件;
(3)设置layoutControlItem的标签属性(text属性);(4)设置我们拖拉的常规编辑控件的相关属性,如DataBindings数据源属性、可见属性、可用(Enable)属性、可用(Visible)属性等。
对于以上问题,(1)和(2)是很简单的,我们直接在设计器中拖拉一下控件,然后命名它们就可以了。为了后面程序的方便,我们这里给定一个规则:LayoutControlItem组
-70-
件我们命名时,以某一个特定的字符串作为前缀,后面加上数据表的字段名称。在我们给出的示例项目中,我们以Lab_”作为名字的前缀,例如对于字段“FieldName”对应的LayoutControlItem,我们命名为“Lab_FieldName”。
2 代码赋值
接下来,我们用代码实现对这些LayoutControlItem的属性根据我们在数据字典中的设置进行赋值即可。2.1 具体代码实现
限于篇幅、这里我只给出ComboBox控件的部分代码,更多代码可查阅示例项目源码。
设置LayoutControlItem控件的Caption属性以及相关参数的方法:
……
case\"ComboBox\":
{
if((lc.Items[itemindex]asDevExpress.XtraLayout.
LayoutControlItem).ControlisDevExpress.XtraEditors.ComboBoxEdit)
{……
if(QueryListStr!=\"\"){
if((QueryListStr.ToLower().Contains(“select”))
&&(QueryListStr.ToLower().Contains(“from”)))//如果数据字典中设置的是SQL查询语句,则执行之读取相应的查询表数据;
{try{
stringsqltxt=(QueryListStr);dtvalue=ExecSqlQuery(sqltxt);}
catch(Exceptionmsg){
thrownewException(“执行SQL语句错误“[
+QueryListStr+“]”+msg.Message.ToString());
}
cb.Properties.Items.Clear();
“boolisHasEmptyValue=false;
for(intk=0;k 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,Field Name);//根据数据字典的设置对控件的属性进行设置。 好了,到此,我们已经准备好了必要的方法,要调用这些对一个LayoutControl进行设置,我们只需在任何我们需要的地方调用我们写好的方法即可: LFH.Function.FuncLayoutControl.SetFieldLabel(\"Lab_\",layoutControl1,MyDT,DevExpress.Utils.HorzAlignment.Near); LFH.Function.FuncLayoutControl.SetLayoutDataBind(layoutControl1,myBS,\"Lab_\");2.2 程序界面图 附图:在运行期间进行读写模式、只读模式、隐藏控件三种模式下的程序界面图。 3 结语 综上,我们不难发现一个规律:要想在程序运行期间动态设置控件属性来提高效率,一个很重要的问题是我们必须吃透控件正确运行需要哪些必须的属性设置,有了这个基础,用代码去做才有可能。至于相关设置信息是以数据表的形式存在或者以xml配置文件的形式存在,就要依据具体的项目需求来具体安排了。这是见仁见智的问题,本文旨在给大家提供一个思路,希望能带来一些启发。 作者简介:李福红(1971-),女,河南鹤壁人,河南省鹤壁理工学校(原鹤壁工贸学校)计算机讲师,研究方向:计算机教学及软件开发。 -71- 因篇幅问题不能全部显示,请点此查看更多更全内容