Несвязанные столбцы¶
Вы можете создавать несвязанные столбцы для отображения пользовательской информации в контрол DataGrid. Несвязанный столбец не привязан к полю в нижележащем источнике данных. Вы должны заполнить этот столбец данными вручную, используя событие DataGridControl.CustomUnboundColumnData.
Чтобы создать несвязанный столбец, выполните следующие действия:
- Создайте объект GridColumn.
- Установите для свойства UnboundDataTypeстолбца значение типа данных, которые этот столбец предназначен для отображения.
- Задайте свойству FieldNameстолбца уникальное имя поля.
- Добавьте столбец в коллекцию DataGridControl.Columns, используя методAddилиInsert. Вы также можете расположить столбец в позиции со свойствомGridColumn.VisibleIndex.
Обратите внимание, что контрол не хранит и не кэширует данные для несвязанных столбцов. Он вызывает событие CustomUnboundColumnData, которое вам нужно обработать, чтобы указать данные для несвязанных столбцов. 
Событие CustomUnboundColumnData срабатывает в следующих случаях:
- 
Когда значение ячейки в несвязанном столбце вот-вот будет отображено (например, во время начальной загрузки контрола или во время прокрутки). В этом случае параметр события IsGettingDataвозвращает значениеtrue. Вам нужно присвоить значение параметру событияValue.
- 
Когда пользователь изменяет данные в ячейках несвязанного столбца. В этом случае параметр события IsGettingDataвозвращает значениеfalse. Прочитайте параметр событияValueи вручную кэшируйте его в своем хранилище для дальнейшего использования.
Вы можете принудительно запустить событие CustomUnboundColumnData с помощью следующих методов:
- RefreshRow- Обновляет указанную строку.
- RefreshData- Заставляет сетку перезагрузить все данные.
Пример 1¶
В следующем примере создается несвязанный столбец Total, доступный только для чтения, и обрабатывается событие CustomUnboundColumnData для вычисления значений столбца на основе значений других полей в соответствии с выражением: Total=UnitPrice*Quantity. Обработчик событий проверяет параметр события IsGettingData и извлекает значения, если этот параметр равен true. 
xmlns:mxdg="https://schemas.eremexcontrols.net/avalonia/datagrid"
xmlns:sys="clr-namespace:System;assembly=System.Runtime"
...
<mxdg:DataGridControl Grid.Column="5" Width="400" Name="dataGrid1" 
 CustomUnboundColumnData="dataGrid1_CustomUnboundColumnData" >
    <mxdg:DataGridControl.Columns>
        <mxdg:GridColumn Name="colUnitPrice" FieldName="UnitPrice" 
         Header="Unit Price" Width="*"  />
        <mxdg:GridColumn Name="colQuantity" FieldName="Quantity" 
         Header="Quantity" Width="*"/>
        <mxdg:GridColumn Name="colTotal" FieldName="Total" Header="Total" 
         Width="*" ReadOnly="True" UnboundDataType="{x:Type sys:Decimal}" />
    </mxdg:DataGridControl.Columns>
</mxdg:DataGridControl>
List<PurchaseRecord> list = new List<PurchaseRecord>();
list.Add(new PurchaseRecord() { UnitPrice = 1.3m, Quantity = 2 });
list.Add(new PurchaseRecord() { UnitPrice = 4m, Quantity = 1 });
list.Add(new PurchaseRecord() { UnitPrice = 10m, Quantity = 20 });
list.Add(new PurchaseRecord() { UnitPrice = 7m, Quantity = 12 });
dataGrid1.ItemsSource = list;
private void dataGrid1_CustomUnboundColumnData(object? sender, DataGridUnboundColumnDataEventArgs e)
{
    if (e.IsGettingData && e.Column.FieldName == "Total")
    {
        PurchaseRecord rec = e.Item as PurchaseRecord;
        if (rec != null)
        {
            e.Value = rec.Quantity * rec.UnitPrice;
        }
    }
}
public partial class PurchaseRecord : ObservableObject
{
    [ObservableProperty]
    decimal unitPrice;
    [ObservableProperty]
    int quantity;
}
* Эта страница была создана автоматически с помощью сервиса машинного перевода Яндекс Переводчик.