DevExpress.XtraLayout.LayoutControl 动态添加控件
Posted jjhua
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了DevExpress.XtraLayout.LayoutControl 动态添加控件相关的知识,希望对你有一定的参考价值。
// Create an item within a specified group,
// bound to a specified data field with the specified editor
private LayoutControlItem CreateItemWithBoundEditor(BaseEdit editor, object dataSource,
string dataMember, LayoutControlGroup parentGroup)
editor.DataBindings.Add("EditValue", dataSource, dataMember);
LayoutControlItem item = parentGroup.AddItem(dataMember, editor) as LayoutControlItem;
return item;
private void CreateLayout()
//Add First Name and Last Name items
LayoutControlItem itemFirstName = CreateItemWithBoundEditor(new TextEdit(), employeesSource,
"FirstName", layoutControl1.Root);
LayoutControlItem itemLastName = CreateItemWithBoundEditor(new TextEdit(), employeesSource,
"LastName", layoutControl1.Root);
// Move the Last Name to the right of the First Name
itemLastName.Move(itemFirstName, InsertTypes.Right);
// Add the Birthday group with a birthday editor inside
LayoutControlGroup birthdayGroup = layoutControl1.AddGroup("Birthday Information");
CreateItemWithBoundEditor(new DateEdit(), employeesSource, "BirthDate", birthdayGroup);
// Add a tab with three address fields
TabbedControlGroup tabbedGroup = layoutControl1.AddTabbedGroup();
LayoutControlGroup addressGroup = tabbedGroup.AddTabPage("Address Details");
string[] dataFields = new string[] "Country", "City", "Address" ;
foreach (string dataField in dataFields)
CreateItemWithBoundEditor(new TextEdit(), employeesSource, dataField, addressGroup);
// Add a tab with a photo
LayoutControlGroup groupPhoto = tabbedGroup.AddTabPage("Photo");
CreateItemWithBoundEditor(new PictureEdit(), employeesSource, "Photo", groupPhoto);
再次添加的时候如果需要先清除之前的item,代码如下
layoutControl.BeginUpdate();
layoutControl.Controls.Clear();
layoutControl.Root.Items.Clear();
再次添加item的代码
layoutControl.EndUpdate();
注意问题:
1、如果使用LayoutControlGroup直接添加Item
上面几行可以改为
layoutControlGroup.BeginUpdate();
layoutControlGroup.Clear();//无法释放Item中的Control,会把Control加在当前Form里,所以需要手动Dispose
layoutControlGroup.EndUpdate();
完整代码例子:
List<BaseEdit> items = new List<BaseEdit>();
layoutControlGroup2.BeginUpdate();
layoutControlGroup2.Clear();
for (int i = items.Count - 1; i >= 0;i-- )
if (items[i] != null)
items[i].Dispose();
items.RemoveAt(i);
LookUpEdit looupEdit = new LookUpEdit();
items.Add(looupEdit);
layoutControlGroup2.AddItem("fsds", looupEdit);
layoutControlGroup2.EndUpdate();
2、注意layoutControlGroup.EndUpdate()相当于刷新了页面,如果之后再执行了其他重绘界面动作会导致显示问题,所以应该最后做本动作
以上是关于DevExpress.XtraLayout.LayoutControl 动态添加控件的主要内容,如果未能解决你的问题,请参考以下文章