Столбцы¶
DataGrid поддерживает связанные и несвязанные столбцы. Связанные столбцы отображают значения из полей связанного источника данных. Несвязанные столбцы позволяют отображать пользовательские данные.
Столбцы DataGrid предоставляют свойства для настройки заголовка столбца, редактора ячеек, свойств сортировки/группировки и других опций.
Создание столбцов¶
Класс GridColumn
представляет собой столбец в DataGridControl
. GridColumn
и TreeListColumn
(столбец в TreeListControl
) наследованы от класса ColumnBase
. Таким образом, столбцы в контролах DataGrid и TreeList совместно используют множество элементов API.
Чтобы получить доступ к коллекции столбцов сетки, используйте свойство DataGridControl.Columns
.
Контрол DataGrid не создает автоматически столбцы при привязке контрола к источнику данных. Четыре подхода позволяют создавать столбцы:
-
Ручное создание колонок
Вы можете определить все столбцы DataGrid вручную в коллекции
DataGridControl.Columns
(в XAML или code-behind). При таком подходе у вас есть доступ к созданным объектам столбца по имени в коде.В следующем примере создаются два столбца DataGrid и настраивается формат отображения значений второго столбца:
xmlns:mxdg="https://schemas.eremexcontrols.net/avalonia/datagrid" <mxdg:DataGridControl Name="dataGrid1" > <mxdg:DataGridControl.Columns> <mxdg:GridColumn Name="colName" FieldName="Name" /> <mxdg:GridColumn Name="colBirthdate" FieldName="Birthdate" > <mxdg:GridColumn.EditorProperties> <mxe:TextEditorProperties DisplayFormatString="yyyy-MM-dd"/> </mxdg:GridColumn.EditorProperties> </mxdg:GridColumn> </mxdg:DataGridControl.Columns> </mxdg:DataGridControl>
-
Автоматическое создание колонок
Включите опцию
DataGridControl.AutoGenerateColumns
для автоматического создания отсутствующих столбцов при привязке контрола к источнику данных. Вы можете применить определенные атрибуты (из пространств именSystem.ComponentModel
иSystem.ComponentModel.DataAnnotations
) к свойствам бизнес-объекта, чтобы управлять автоматической генерацией столбцов и настраивать свойства автоматически генерируемых столбцов (например, отображаемое имя столбца и порядок). -
Комбинирование ручного и автоматического способов создания колонок
Вы можете объединить два описанных выше подхода: вручную создать необходимые столбцы в коллекции
DataGridControl.Columns
, а затем включить опциюDataGridControl.AutoGenerateColumns
, чтобы делегировать генерацию других столбцов DataGrid. -
Создание колонок из View Model
DataGrid может создавать столбцы из источника столбцов, определенного в модели представления. Используйте свойства
ColumnsSource
иColumnTemplate
в этом сценарии. Смотрите раздел Создание столбцов из модели представления .
Смотрите Автоматическая генерация столбцов для получения информации об автоматически генерируемых столбцах.
Привязка столбцов к данным¶
Свойство GridColumn.FieldName
позволяет привязать столбец к полю в таблице нижележащих данных или к публичному свойству бизнес-объекта. После привязки столбец извлекает значения из источника данных.
DataGrid также позволяет создавать несвязанные столбцы, значения которых следует вводить вручную, используя событие DataGridControl.CustomUnboundColumnData
. Смотрите Несвязанные столбцы для получения дополнительной информации.
Не рекомендуется привязывать несколько столбцов DataGrid к одному и тому же полю данных/свойству.
В следующем примере создаются столбцы DataGrid и привязываются к ним данные.
xmlns:mxdg="https://schemas.eremexcontrols.net/avalonia/datagrid"
<mxdg:DataGridControl Grid.Column="3" Width="200" Name="dataGrid1" HorizontalAlignment="Stretch">
<mxdg:DataGridControl.Columns>
<mxdg:GridColumn Name="colFirstName" FieldName="FirstName" Header="First Name"
Width="*" AllowSorting="False" />
<mxdg:GridColumn Name="colLastName" FieldName="LastName" Header="Last Name" Width="*"/>
<mxdg:GridColumn Name="colCity" FieldName="City" Header="City" Width="*" ReadOnly="True" />
<mxdg:GridColumn Name="colPhone" FieldName="Phone" Header="Phone" Width="*"/>
</mxdg:DataGridControl.Columns>
</mxdg:DataGridControl>
using Eremex.AvaloniaUI.Controls.DataGrid;
GridColumn colFirstName = new GridColumn()
{ FieldName = "FirstName", Header = "First Name", AllowSorting = false,
Width= new GridLength(1, GridUnitType.Star) };
dataGrid1.Columns.Add(colFirstName);
Автоматическое формирование столбцов¶
Установите для свойства AutoGenerateColumns
значение true
(значение по умолчанию - false
), чтобы включить автоматическую генерацию столбцов для свойств в источнике данных. Когда для AutoGenerateColumns
установлено значение true
, контрол DataGrid извлекает публичные свойства из источника данных, генерирует столбцы и привязывает их к свойствам. Если коллекция Columns
контрола уже содержит столбец, привязанный к определенному свойству/полю, автоматически не генерируется дополнительный столбец, привязанный к тому же свойству/полю.
События AutoGeneratingColumn
и AutoGeneratedColumns
позволяют настраивать автоматически сгенерированные столбцы. Событие AutoGeneratingColumn
срабатывает, когда автоматически сгенерированный столбец собирается быть добавленным в коллекцию Columns
. Установите для параметра события e.Cancel
значение true
, чтобы предотвратить добавление столбца в коллекцию.
Событие AutoGeneratedColumns
срабатывает после того, как все столбцы были автоматически сгенерированы.
Когда вы назначаете контролу другой источник данных, DataGrid сначала удаляет столбцы, которые ранее были сгенерированы автоматически, а затем автоматически генерирует столбцы для нового источника данных.
Используйте атрибуты для настройки свойств автоматически генерируемых столбцов¶
Вы можете применить определенные атрибуты (из пространств имен System.ComponentModel
и System.ComponentModel.DataAnnotations
) к свойствам бизнес-объекта (записи источника данных), чтобы настроить статус видимости, вид и свойства поведения для соответствующих автоматически сгенерированных столбцов DataGrid. Поддерживаемые атрибуты описаны ниже:
Атрибут Browsable
¶
Атрибут System.ComponentModel.BrowsableAttribute
контролирует автоматическую генерацию столбца. Примените атрибут Browsable(false) к определенным свойствам, чтобы предотвратить автоматическое создание соответствующих столбцов.
using CommunityToolkit.Mvvm.ComponentModel;
using System.ComponentModel;
public partial class MyBusinessObject : ObservableObject
{
[ObservableProperty]
[property: Browsable(false)]
public int serviceId = "";
}
Атрибут System.ComponentModel.BrowsableAttribute
эквивалентен использованию атрибута System.ComponentModel.DataAnnotations.DisplayAttribute
с параметром AutoGenerateField
.
Атрибут Display
¶
System.ComponentModel.DataAnnotations.DisplayAttribute
- это атрибут общего назначения, который контролирует автоматическую генерацию столбцов и свойства отображения автоматически сгенерированных столбцов. Атрибут имеет следующие параметры, поддерживаемые контролом DataGrid:
-
AutoGenerateField
— Указывает, следует ли автоматически генерировать соответствующий столбец. -
Order
— Указывает видимую позицию автоматически сгенерированного столбца (ColumnBase.VisibleIndex
). -
Name
— Указывает заголовок автоматически сгенерированного столбца (ColumnBase.Header
). -
ShortName
— эквивалентен параметруName
. -
GroupName
— Указывает название диапазона, который будет привязан к автоматически сгенерированному столбцу. Это значение атрибута используется для инициализации свойстваGridColumn.BandName
, если опциейDataGridControl.AutoGenerateBands
являетсяtrue
(по умолчанию).Когда Data Grid обнаруживает
DisplayAttribute.GroupName
, он проверяет наличие существующего диапазона с соответствующим именем (GridBand.BandName
). Если такового не существует, контрол автоматически создает диапазон и инициализирует его свойствоGridBand.BandName
значениемDisplayAttribute.GroupName
.Параметр
DisplayAttribute.GroupName
также поддерживает вложенные диапазоны. Используйте символ "/" для разделения родительского и дочернего диапазонов (например, "ParentBandName/ChildBandName"). Чтобы включить '/' в качестве литерала, используйте "//".
using CommunityToolkit.Mvvm.ComponentModel;
using System.ComponentModel.DataAnnotations;
public partial class MyBusinessObject : ObservableObject
{
[ObservableProperty]
[property: Display(Name = "Birth date", Order=2, GroupName="General")]
public DateTime? birthdate = null;
[ObservableProperty]
[property: Display(GroupName = "Details/Address")]
public string country { get; set; }
[ObservableProperty]
[property: Display(GroupName = "Details/Contact")]
public string phone { get; set; }
}
Атрибут DisplayName
¶
Атрибут System.ComponentModel.DisplayNameAttribute
позволяет вам инициализировать заголовок автоматически сгенерированного столбца (ColumnBase.Header
).
using CommunityToolkit.Mvvm.ComponentModel;
using System.ComponentModel;
public partial class MyBusinessObject : ObservableObject
{
[ObservableProperty]
[property: DisplayName("Birth date")]
public DateTime? birthdate = null;
}
Атрибут System.ComponentModel.DisplayNameAttribute
эквивалентен использованию атрибута System.ComponentModel.DataAnnotations.DisplayAttribute
с параметром Name
или ShortName
.
Атрибут Editable
¶
Атрибут System.ComponentModel.EditableAttribute
, примененный к свойству, создает недоступный для редактирования столбец. Пользователи не могут открывать встроенные редакторы и, таким образом, выделять и копировать текст.
using CommunityToolkit.Mvvm.ComponentModel;
using System.ComponentModel;
public partial class MyBusinessObject : ObservableObject
{
[ObservableProperty]
[property: Editable(false)]
public int parentId = -1;
}
Атрибут Readonly
¶
Атрибут System.ComponentModel.ReadonlyAttribute
, применяемый к свойству, создает столбец, доступный только для чтения. Пользователи могут выделять и копировать текст в столбцах, доступных только для чтения, но не редактировать значения.
using CommunityToolkit.Mvvm.ComponentModel;
using System.ComponentModel;
public partial class MyBusinessObject : ObservableObject
{
[ObservableProperty]
[property: ReadOnly(true)]
public int id = -1;
}
Создание столбцов из модели представления¶
Вы можете заполнить контрол DataGrid столбцами из источника столбцов, определенного в модели представления. Источник столбца - это коллекция бизнес-объектов, из которых генерируются объекты GridColumn
в соответствии с указанным шаблоном. Следующие элементы API поддерживают генерацию столбцов из модели представления:
-
DataGridControl.ColumnsSource
— Коллекция бизнес-объектов, используемых для генерации столбцов таблицы в соответствии с шаблономColumnTemplate
. -
DataGridControl.ColumnTemplate
— Шаблон, который инициализирует объектGridColumn
из бизнес-объектов, хранящихся в источнике столбцов.
Пример - Генерирование столбцов из источника столбцов¶
Следующий фрагмент кода из демонстрации "Больших данных" показывает, как вы можете создавать и инициализировать столбцы Data Grid из источника столбцов (DataGridControl.ColumnsSource
).
<mxdg:DataGridControl ItemsSource="{Binding Items}" ColumnsSource="{Binding Columns}" AutoGenerateColumns="True" BorderThickness="0,0,1,0"
CustomUnboundColumnData="DataGridControl_CustomUnboundColumnData" PropertyChanged="DataGridControl_PropertyChanged">
<mxdg:DataGridControl.ColumnTemplate>
<views:DataGridLargeDataViewColumnTemplate/>
</mxdg:DataGridControl.ColumnTemplate>
</mxdg:DataGridControl>
public class DataGridLargeDataViewColumnTemplate : ITemplate<object, GridColumn>
{
public GridColumn Build(object param)
{
var largeDataColumn = (LargeDataColumn)param;
var gridColumn = new GridColumn()
{
FieldName = largeDataColumn.FieldName,
Header = largeDataColumn.Header
};
if (!largeDataColumn.FieldName.Contains("Id"))
{
gridColumn.UnboundDataType = largeDataColumn.DataType;
if (largeDataColumn.FieldName.Contains("ComboBox"))
gridColumn.EditorProperties = new ComboBoxEditorProperties() { ItemsSource = EmployeesData.EmployeeNames };
else if (largeDataColumn.FieldName.Contains("Numeric"))
gridColumn.EditorProperties = new SpinEditorProperties() { MaskType = MaskType.Numeric, Mask = "c" };
}
return gridColumn;
}
}
Полный пример смотрите в демонстрации больших данных для контрола Data Grid.
Перемещение столбцов¶
Используйте свойство GridColumn.VisibleIndex
, чтобы указать визуальную позицию столбца. Чтобы скрыть столбец, установите для его свойства GridColumn.VisibleIndex
значение -1 или установите для свойства IsVisible
значение false
.
Дефолтное поведение контрола позволяет пользователю переупорядочивать столбцы. Используйте следующие свойства, чтобы запретить перемещение столбца:
DataGridControl.AllowColumnMoving
— Указывает, может ли пользователь перемещать любой столбец.GridColumn.AllowMoving
— Указывает, может ли пользователь перемещать определенный столбец.
Изменение размера столбцов¶
Вы можете использовать следующие свойства для управления шириной контролируемого столбца в DataGrid:
GridColumn.Width
— Ширина столбца, указанная в качестве значенияGridLength
.GridColumn.MinWidth
— Минимальная ширина столбца.GridColumn.MaxWidth
— Максимальная ширина столбца.
Свойство Width
относится к типу GridLength
. Это позволяет вам установить ширину столбца равной:
- Фиксированная ширина (количество пикселей).
- Взвешенная доля доступного пространства (обозначение star).
- Значение "Автоматически" — активирует автоматическое вычисление ширины столбца, подогнанное под заголовок столбца и видимые значения. Когда пользователь прокручивает контрол по вертикали, контрол может увеличить ширину столбца, подгоняя новые значения ячеек, появившиеся во время операции прокрутки.
xmlns:mxdg="https://schemas.eremexcontrols.net/avalonia/datagrid"
<mxdg:DataGridControl Name="dataGrid1">
<mxdg:DataGridControl.Columns>
<mxdg:GridColumn Name="colFirstName" FieldName="FirstName" Header="First Name" Width="*"/>
<mxdg:GridColumn Name="colLastName" FieldName="LastName" Header="Last Name" Width="2*"/>
<mxdg:GridColumn Name="colPhone" FieldName="Phone" Header="Phone" Width="*"/>
</mxdg:DataGridControl.Columns>
</mxdg:DataGridControl>
Следующие свойства контролируют операции изменения размера столбцов, выполняемые пользователями.
DataGridControl.AllowColumnResizing
— Указывает, может ли пользователь изменять размер любого столбца.GridColumn.AllowResizing
— Указывает, может ли пользователь изменять размер определенного столбца.
Заголовки столбцов¶
Заголовки столбцов DataGrid отображаются на панели заголовков. Вы можете скрыть эту панель с помощью свойства DataGridControl.ShowColumnHeaders
.
Высота панели автоматически регулируется в подогнанном под содержимое заголовков столбцов. Используйте свойство HeaderPanelMinHeight
, чтобы ограничить минимальную высоту панели.
Заголовок столбца изначально отображает заголовок (текстовую метку), который является текстовым представлением свойства ColumnBase.Header
. Если свойство ColumnBase.Header
не задано, заголовок столбца генерируется из имени поля столбца (ColumnBase.FieldName
).
Используйте свойство ColumnBase.HeaderTemplate
, чтобы указать шаблон, используемый для отображения заголовка столбца. Шаблон позволяет отображать картинки и пользовательские контролы, а также отображать текст произвольным способом.
Следующий код отображает картинку перед заголовком столбца. Выражение <TextBlock Text="{Binding}">
отображает содержимое свойства Header
столбца:
xmlns:mxdg="https://schemas.eremexcontrols.net/avalonia/datagrid"
<mxdg:DataGridControl Name="DataGrid" HeaderPanelMinHeight="50">
<mxdg:GridColumn FieldName="Number" Header="Position" HeaderVerticalAlignment="Bottom">
<mxdg:GridColumn.HeaderTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<Image Source="/info24x24.png" Width="24" Height="24" Margin="0,0,5,0"></Image>
<TextBlock Text="{Binding}" VerticalAlignment="Center"/>
</StackPanel>
</DataTemplate>
</mxdg:GridColumn.HeaderTemplate>
</mxdg:GridColumn>
</mxdg:DataGridControl>
Используйте свойства ColumnBase.HeaderHorizontalAlignment
и ColumnBase.HeaderVerticalAlignment
, чтобы выровнять содержимое заголовка столбца по горизонтали и вертикали.
Сортировка по столбцам¶
Пользователь может щелкнуть заголовок столбца или использовать контекстное меню заголовка столбца, чтобы отсортировать DataGrid по столбцу. Дополнительную информацию смотрите в разделе Сортировка данных .
Группировка столбцов¶
Пользователи могут группировать данные по любому количеству столбцов. Чтобы сгруппировать по столбцу, пользователь может перетащить столбец на панель группирования или использовать соответствующую команду в контекстном меню заголовка столбца. Смотрите следующий раздел для получения дополнительной информации: Группировка данных .
Значения в столбцах¶
Чтобы узнать, как извлекать значения ячеек для определенных строк, смотрите раздел Строки .
Всплывающие подсказки в заголовке столбца¶
Используйте свойство HeaderToolTip
, чтобы указать пользовательские всплывающие подсказки для заголовков столбцов. Пользовательские всплывающие подсказки отображаются при наведении курсора на заголовки столбцов независимо от того, обрезан текст заголовка столбца или нет.
Если столбцу не назначена пользовательская всплывающая подсказка, для заголовка столбца отображается всплывающая подсказка по умолчанию, если текст заголовка обрезан. Всплывающая подсказка по умолчанию отображает полный, необрезанный текст заголовка.
Смотрите также¶
* Эта страница была создана автоматически с помощью сервиса машинного перевода Яндекс Переводчик.