You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Blazorise DataGrid动态列与数据绑定渲染异常求助

Blazorise DataGrid 动态列绑定字典数据的解决方案

问题背景

数据库表Controls存储网格列配置,包含COLUMN_NAME、COLUMN_CAPTION字段;通过public IEnumerable<ControlSettings> datagrid { get; set; }获取列配置,用List<Dictionary<string, object>> gridData存储网格数据(字典键对应列名)。

尝试用以下代码渲染DataGrid时抛出错误:

<Blazorise.DataGrid.DataGrid Data="@gridData" TItem="Dictionary<string, object>">  
    <DataGridColumns>  
        @foreach (var column in datagrid)  
        {  
            <DataGridColumn TItem="Dictionary<string, object>" Field="@column.COLUMN_NAME" Caption="@column.COLUMN_CAPTION" />  
        }  
    </DataGridColumns>  
</Blazorise.DataGrid.DataGrid>

错误信息:

ArgumentException: Cannot detect the member of System.Collections.Generic.Dictionary`2[System.String,System.Object] (Parameter 'LOC')

原因:Blazorise DataGrid的Field属性依赖反射查找类的成员属性,而Dictionary<string,object>没有对应列名的属性,导致无法解析。

解决方案

放弃使用Field属性,改用DisplayTemplate手动渲染字典中的值,实现动态列绑定:

<Blazorise.DataGrid.DataGrid Data="@gridData" TItem="Dictionary<string, object>">  
    <DataGridColumns>  
        @foreach (var column in datagrid)  
        {  
            <DataGridColumn TItem="Dictionary<string, object>" Caption="@column.COLUMN_CAPTION">
                <DisplayTemplate>
                    @context.Value[column.COLUMN_NAME]
                </DisplayTemplate>
            </DataGridColumn>
        }  
    </DataGridColumns>  
</Blazorise.DataGrid.DataGrid>

关键说明

  • DisplayTemplate用于自定义列的内容渲染,context.Value代表当前行的Dictionary<string,object>实例
  • 通过字典键(列名)直接取值,绕开了DataGrid对类成员属性的依赖

扩展支持排序(可选)

如果需要排序功能,可通过SortTemplate自定义排序逻辑:

<DataGridColumn TItem="Dictionary<string, object>" Caption="@column.COLUMN_CAPTION" Sortable="true">
    <DisplayTemplate>
        @context.Value[column.COLUMN_NAME]
    </DisplayTemplate>
    <SortTemplate>
        @{
            var columnName = column.COLUMN_NAME;
            gridData = context.SortDirection == SortDirection.Ascending
                ? gridData.OrderBy(d => d[columnName]).ToList()
                : gridData.OrderByDescending(d => d[columnName]).ToList();
        }
    </SortTemplate>
</DataGridColumn>

内容的提问来源于stack exchange,提问作者Flutter Beams

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 13:24:54