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 动态添加控件的主要内容,如果未能解决你的问题,请参考以下文章