Перейти к содержанию

Редактирование данных

Встроенные редакторы Eremex, используемые по умолчанию

По умолчанию контрол DataGrid использует встроенные редакторы Eremex для отображения и редактирования значений ячеек стандартных типов данных.

datagrid-editing

Следующий список показывает редакторы Eremex, связанные с отдельными типами данных:

  • Логические значения — CheckEditor
  • Значения типа Double — SpinEditor
  • Значения перечислений — ComboBoxEditor
  • Свойства с атрибутом TypeConverter, метод TypeConverter.GetStandardValuesSupported которого возвращает trueComboBoxEditor
  • Прочие значения — TextEditor

Вы можете явно указать редакторы ячеек для колонок DataGrid, чтобы переопределить назначение редактора по умолчанию и настроить свойства встроенных редакторов. Текущий раздел содержит более подробную информацию о назначении редакторов.

Когда в ячейке начинается операция редактирования, вы можете получить доступ к активному встроенному редактору и изменить его. Подробнее смотрите в разделе Доступ к активному встроенному редактору Eremex.

Назначение встроенных редакторов Eremex

Чтобы явно назначить встроенный редактор Eremex ячейкам (колонкам), используйте свойство GridColumn.EditorProperties.

Вы можете установить свойство EditorProperties в один из следующих объектов, определяющих тип встроенного редактора (все эти объекты являются потомками BaseEditorProperties):

  • ButtonEditorProperties — Содержит настройки, специфичные для контрола ButtonEditor.
  • CheckEditorProperties — Содержит настройки, специфичные для контрола CheckEditor.
  • ComboBoxEditorProperties — Содержит настройки, специфичные для контрола ComboBoxEditor.
  • DateEditorProperties — Содержит настройки, специфичные для контрола DateEditor.
  • HyperlinkEditorProperties — Содержит настройки, специфичные для контрола HyperlinkEditor.
  • MemoEditorProperties — Содержит настройки, специфичные для контрола MemoEditor.
  • PopupColorEditorProperties — Содержит настройки, специфичные для контрола PopupColorEditor.
  • SegmentedEditorProperties — Содержит настройки, специфичные для контрола SegmentedEditor.
  • SpinEditorProperties — Содержит настройки, специфичные для контрола SpinEditor.
  • TextEditorProperties — Содержит настройки, специфичные для контрола TextEditor.

Предположим, вы установили свойство EditorProperties в объект SpinEditorProperties. В режиме отображения (когда редактирование ячейки не активно) контрол DataGrid эмулирует SpinEditor в ячейках целевой колонки, используя настройки объекта SpinEditorProperties. Реальный SpinEditor не создаётся, пока в ячейке не начнётся операция редактирования. Когда пользователь начинает редактирование ячейки, контрол DataGrid создаёт реальный встроенный редактор SpinEditor в сфокусированной ячейке. После завершения операции редактирования контрол уничтожает реальный SpinEditor и снова начинает эмулировать SpinEditor в этой ячейке. Смотрите раздел Доступ к активному встроенному редактору Eremex, чтобы узнать, как получить доступ к реальному редактору ячейки.

Пример - Как использовать ButtonEditor в качестве встроенного редактора в колонке DataGrid

Следующий код назначает встроенный редактор ButtonEditor колонке DataGrid.

xmlns:mxdg="https://schemas.eremexcontrols.net/avalonia/datagrid" 
xmlns:mxe="https://schemas.eremexcontrols.net/avalonia/editors"

<mxdg:DataGridControl.Columns>
    <mxdg:GridColumn Header="Name" FieldName="Name">
        <mxdg:GridColumn.EditorProperties>
            <mxe:ButtonEditorProperties>
                <mxe:ButtonEditorProperties.Buttons>
                    <mxe:ButtonSettings Content="Clear" 
                     Command="{Binding 
                      $parent[mxdg:CellControl].DataControl.DataContext.ClearValueCommand}"/>
                </mxe:ButtonEditorProperties.Buttons>
            </mxe:ButtonEditorProperties>
        </mxdg:GridColumn.EditorProperties>
    </mxdg:GridColumn>
</mxdg:DataGridControl.Columns>

Назначение встроенных редакторов Eremex с помощью шаблонов

Вы можете использовать шаблоны, чтобы назначать редакторы Eremex колонкам DataGrid. Шаблоны ячеек позволяют предоставлять разные редакторы для разных строк одного и того же колонки.

Note

Использование шаблонов имеет следующие ограничения:

  • Отображаемый текст, предоставляемый через шаблоны ячеек, не используется для сортировки, группировки и фильтрации данных.
  • Шаблоны ячеек не экспортируются.

Чтобы предоставить встроенный редактор для колонки в шаблоне ячейки, используйте свойство GridColumn.CellTemplate.

Установите свойство x:Name в значение "PART_Editor" для редактора Eremex, определённого в шаблоне. Это обеспечивает автоматическую привязку значения редактора (BaseEditor.EditorValue) к полю колонки. Кроме того, настройки внешнего вида редактора (видимость границы и цвета текста в активном и неактивном состояниях) будут управляться контролом DataGrid.

xmlns:mxdg="https://schemas.eremexcontrols.net/avalonia/datagrid"
xmlns:mxe="https://schemas.eremexcontrols.net/avalonia/editors"
...
<mxdg:GridColumn Header="Phone" FieldName="Phone">
    <mxdg:GridColumn.CellTemplate>
        <DataTemplate>
            <mxe:ButtonEditor x:Name="PART_Editor">
                <mxe:ButtonEditor.Buttons>
                    <mxe:ButtonSettings Content="..."/>
                </mxe:ButtonEditor.Buttons>
            </mxe:ButtonEditor>
        </DataTemplate>
    </mxdg:GridColumn.CellTemplate>
</mxdg:GridColumn>

Пользовательские редакторы

Вы можете использовать шаблоны ячеек для встраивания пользовательских редакторов в колонки DataGrid. Доступны следующие подходы:

  • Назначить редактор напрямую конкретной колонке.
  • Динамически назначать редакторы колонкам на основе типа данных базового объекта колонки.

Подробнее смотрите в разделе Пользовательские редакторы.

Получение и установка значений ячеек

Используйте следующий API для получения и установки значений ячеек:

  • DataGridControl.GetCellValue
  • DataGridControl.SetCellValue

Доступ к активному встроенному редактору Eremex

  • Свойство ActiveEditor — Возвращает активный встроенный редактор.

Когда встроенный редактор Eremex назначен колонке DataGrid (неявно, или явно с помощью свойства EditorProperties и шаблонов), контрол эмулирует указанный встроенный редактор в ячейках этой колонки в режиме отображения (когда редактирование ячейки не активно). В этот момент реальный встроенный редактор не существует. Эмуляция редакторов ячеек в режиме отображения повышает производительность приложения.

Когда пользователь начинает редактировать ячейку, контрол создаёт реальный встроенный редактор. В этот момент вы можете использовать свойство контрола ActiveEditor, чтобы получить доступ к реальному экземпляру редактора Eremex. Когда ячейка теряет фокус, реальный редактор уничтожается, и свойство ActiveEditor возвращает null.

  • Событие ShownEditor — Вызывается после создания встроенного редактора для ячейки и начала операции редактирования. Вы можете получить доступ к активному редактору с помощью параметра события Editor или свойства контрола ActiveEditor.

Отображение редакторов ячеек

  • Метод ShowEditor — Активирует редактор ячейки в сфокусированной ячейке.
  • Событие ShowingEditor — Позволяет предотвратить активацию редактора ячейки пользователями в определённых случаях. При обработке события ShowingEditor установите параметр события Cancel в значение true, чтобы отключить активацию редактора. Смотрите Как сделать ячейки нередактируемыми (предотвращение копирования).

Отображение редакторов ячеек пользователями

Когда редактирование ячеек включено, клик по ячейке строки активирует редактор ячейки. Используйте свойство DataControlBase.EditorShowMode, чтобы указать, какое действие мыши активирует редактор. Вы можете установить это свойство в одно из следующих значений:

  • EditorShowMode.PointerPressed (по умолчанию) — Редактор ячейки активируется при нажатии кнопки мыши.

    Когда включено перетаскивание строк и RowDragMode установлен в RowDragMode.Row, режим EditorShowMode.PointerPressed не поддерживается. В этой конфигурации режимом по умолчанию является EditorShowMode.PointerPressedInFocusedCell.

  • EditorShowMode.PointerPressedInFocusedCell — Редактор ячейки активируется при нажатии кнопки мыши в сфокусированной ячейке.

    Этот режим используется по умолчанию, если перетаскивание строк активно и свойство контрола RowDragMode установлено в RowDragMode.Row.

  • EditorShowMode.PointerReleased — Редактор ячейки активируется при отпускании кнопки мыши.

  • EditorShowMode.PointerReleasedInFocusedCell — Редактор ячейки активируется при отпускании кнопки мыши в сфокусированной ячейке.

Закрытие активного встроенного редактора

  • Метод CloseEditor — Сохраняет изменения, внесённые в редакторе ячейки, и закрывает редактор.
  • Метод HideEditor — Закрывает редактор ячейки без сохранения каких-либо изменений.

  • Событие HiddenEditor — Вызывается после закрытия активного редактора ячейки.

Сохранение изменений, внесённых во встроенном редакторе

  • Метод CloseEditor — Сохраняет изменения, внесённые в редакторе ячейки, и закрывает редактор.
  • Метод PostEditor — Сохраняет изменения, внесённые в активном редакторе ячейки, без закрытия редактора.

Как сделать ячейки доступными только для чтения (с возможностью копирования)

Вы можете сделать ячейки колонки доступными только для чтения, разрешив при этом пользователям копировать значения ячеек. Для этого:

  • Установите свойство колонки ReadOnly в значение true.
  • Оставьте свойство колонки AllowEditing установленным в значение true (по умолчанию).
<mxdg:GridColumn FieldName="FirstName" ReadOnly="True"/>

cells-readonly

Как сделать ячейки нередактируемыми (предотвращение копирования)

Весь грид

Чтобы сделать весь грид нередактируемым, установите свойство контрола AllowEditing в значение false.

<mxdg:DataGridControl x:Name="dataGrid" AllowEditing="False">

Конкретные колонки

Чтобы сделать все ячейки в конкретной колонке нередактируемыми, используйте один из следующих подходов:

  • Установите свойство колонки AllowEditing в значение false.

    <mxdg:GridColumn FieldName="HireDate" AllowEditing="False"/>
    

    cells-noneditable

  • Установите свойство колонки AllowFocus в значение false. Эта настройка предотвращает получение фокуса колонкой.

Конкретные ячейки

Чтобы сделать отдельные ячейки нередактируемыми, обработайте событие ShowingEditor. Это событие вызывается, когда редактор ячейки должен быть активирован. Установите параметр события Cancel в значение true, чтобы предотвратить активацию редактора ячейки.

private void DataGrid_ShowingEditor(object sender, DataGridShowingEditorEventArgs e)
{
    DataGridControl grid = sender as DataGridControl;
    // Your condition to prevent cell editor activation
    if(grid.FocusedRowIndex == 0) 
        e.Cancel = true;
}



* Эта страница переведена с использованием технологий машинного перевода.