Skip to main content
A newer version of this page is available. .

DataLayoutControl.RetrieveFields() Method

Creates layout items for all public fields in the bound data source.

Namespace: DevExpress.XtraDataLayout

Assembly: DevExpress.XtraLayout.v19.1.dll

Declaration

public virtual void RetrieveFields()

Remarks

This method clears the control’s layout item collection and then adds new layout items for all fields in the bound data source (DataLayoutControl.DataSource). For each field, a predefined editor is created, depending on the field’s type, and it’s automatically bound to the data field.

When binding to a data source at runtime, you can enable the DataLayoutControl.AutoRetrieveFields option. With this option enabled, the RetrieveFields method is automatically called each time a new value is assigned to the DataLayoutControl.DataSource property.

For information on customizing binding and layout settings during the layout generation, see Binding to Data Source in Code.

To learn how to customize an existing layout, see Customizing a Layout In Code.

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.

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;
        }
}

The following code snippets (auto-collected from DevExpress Examples) contain references to the RetrieveFields() method.

Note

The algorithm used to collect these code examples remains a work in progress. Accordingly, the links and snippets below may produce inaccurate results. If you encounter an issue with code examples below, please use the feedback form on this page to report the issue.

See Also