跳转至

未绑定列

您可以创建未绑定列,在 DataGrid 控件中显示自定义信息。未绑定列不绑定到基础数据源中的字段。您需要使用 DataGridControl.CustomUnboundColumnData 事件手动为此列填充数据。

要创建未绑定列,请执行以下操作:

请注意,控件不会存储或缓存未绑定列的数据。控件会调用 CustomUnboundColumnData 事件,您需要处理该事件来为未绑定列指定数据。

CustomUnboundColumnData 事件在以下情况下触发:

  • 未绑定列中的单元格值即将显示时(例如,在控件初次加载期间或滚动时)。在这种情况下,IsGettingData 事件参数返回 true。您需要为 Value 事件参数赋值。

  • 用户更改未绑定列单元格中的数据时。在这种情况下,IsGettingData 事件参数返回 false。读取 Value 事件参数,并将其手动缓存到您的存储中以供后续使用。

可以使用以下方法强制触发 CustomUnboundColumnData 事件:

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



* 本页面使用机器翻译技术翻译。