Back to Devexpress

DataLayoutControl Class

windowsforms-devexpress-dot-xtradatalayout.md

latest6.4 KB
Original Source

DataLayoutControl Class

Creates and maintains a consistent layout of controls for editing a specific data source’s fields. See Data Layout Control.

Namespace : DevExpress.XtraDataLayout

Assembly : DevExpress.XtraLayout.v25.2.dll

NuGet Package : DevExpress.Win.Navigation

Declaration

csharp
[DXLicenseWinForms]
public class DataLayoutControl :
    LayoutControl,
    DataLayoutControlDesignerMethods
vb
<DXLicenseWinForms>
Public Class DataLayoutControl
    Inherits LayoutControl
    Implements DataLayoutControlDesignerMethods

Remarks

The DataLayoutControl extends the LayoutControl, providing an easy way to create a layout for editing a specific data source’s fields. It introduces design time tools - the Wizard and Data Source Binding Manager that can be activated via the control’s Tasks pane and Property Grid.

To learn more, see Data Layout Control.

Example

The following example shows how to change a layout item’s control in code.

Assume that a DataLayoutControl is bound to a data source containing a Description field. The DataLayoutControl.RetrieveFields method retrieves information on available fields in the data source, and automatically creates layout items with controls for these fields. By default, for a field of the string type, a layout item with a TextEdit control inside it is created. The example shows how to locate a layout item with a control bound to the Description field, and replace its TextEdit control with a MemoEdit control. To change a layout item’s control, the new control must be assigned to the LayoutControlItem.Control property within the LayoutControl.BeginUpdate and LayoutControl.EndUpdate method pair.

csharp
using DevExpress.XtraLayout;
using DevExpress.XtraEditors;

dataLayoutControl1.RetrieveFields();

foreach (BaseLayoutItem baseItem in dataLayoutControl1.Items) {
    LayoutControlItem item = baseItem as LayoutControlItem;
    if(item !=null && item.Control.DataBindings.Count > 0)
        if (item.Control.DataBindings[0].BindingMemberInfo.BindingField == "Description") {
            dataLayoutControl1.BeginUpdate();
            Control prevControl = item.Control;
            Binding binding = prevControl.DataBindings[0];
            prevControl.DataBindings.Clear();
            dataLayoutControl1.Controls.Remove(prevControl);
            Control newControl = new MemoEdit();
            newControl.Name = "myMemoEdit";
            // Bind the new control to the same field as the previous control.
            newControl.DataBindings.Add(new Binding(binding.PropertyName, binding.DataSource,
                binding.BindingMemberInfo.BindingField, binding.FormattingEnabled));
            dataLayoutControl1.Controls.Add(newControl);
            item.Control = newControl;                        
            prevControl.Dispose();
            dataLayoutControl1.EndUpdate();
            // Change the item's size after the EndUpdate method.
            item.Size = new Size(100, 50);
            break;
        }
}
vb
Imports DevExpress.XtraLayout
Imports DevExpress.XtraEditors

dataLayoutControl1.RetrieveFields()

For Each baseItem As BaseLayoutItem In dataLayoutControl1.Items
    Dim item As LayoutControlItem = TryCast(baseItem, LayoutControlItem)
    If Not item Is Nothing AndAlso item.Control.DataBindings.Count > 0 Then
        If item.Control.DataBindings(0).BindingMemberInfo.BindingField = "Description" Then
            dataLayoutControl1.BeginUpdate()
            Dim prevControl As Control = item.Control
            Dim binding As Binding = prevControl.DataBindings(0)
            prevControl.DataBindings.Clear()
            dataLayoutControl1.Controls.Remove(prevControl)
            Dim newControl As Control = New MemoEdit()
            newControl.Name = "myMemoEdit"
            ' Bind the new control to the same field as the previous control.
            newControl.DataBindings.Add(New Binding(binding.PropertyName, binding.DataSource, _
                binding.BindingMemberInfo.BindingField, binding.FormattingEnabled))
            dataLayoutControl1.Controls.Add(newControl)
            item.Control = newControl
            prevControl.Dispose()
            dataLayoutControl1.EndUpdate()
            ' Change the item's size after the EndUpdate method.
            item.Size = New Size(100, 50)
            Exit For
        End If
    End If
Next baseItem

Implements

IPrintable

IXtraResizableControl

Inheritance

Object MarshalByRefObject Component Control ScrollableControl ContainerControl LayoutControl DataLayoutControl

See Also

DataLayoutControl Members

Data Layout Control

LayoutControl

DevExpress.XtraDataLayout Namespace