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

Blazor Server .NET7中MongoDB结合RadzenDataGrid数组数据显示问题

解决RadzenDataGrid显示数组类型属性为System.String[]的问题

问题原因

RadzenDataGrid直接绑定数组类型属性时,默认调用数组的ToString()方法,因此会显示System.String[]而非数组内的具体元素。同时Property属性仅支持绑定实体的直接属性,不支持数组索引表达式(如MajorRequirements[0]),所以你之前的尝试均无效。

解决方案

方法1:使用模板列(Template)自定义渲染

修改RadzenDataGridColumn,通过Template属性自定义数组的显示逻辑,将数组元素拼接为易读的字符串:

@page "/page"
<h3>template</h3>

<RadzenDataGrid AllowFiltering="true" AllowColumnResize="false" AllowAlternatingRows="true" FilterMode="FilterMode.Advanced" AllowSorting="true" PageSize="20" AllowPaging="true" PagerHorizontalAlign="HorizontalAlign.Left" ShowPagingSummary="true" Data="@queryMajor" TItem="Majors" ColumnWidth="300px" LogicalFilterOperator="LogicalFilterOperator.Or">
    <Columns>
        <RadzenDataGridColumn TItem="Majors" Property="Major" Title="Major" Frozen="true" Width="0px" />
        <!-- 替换为Template列自定义显示 -->
        <RadzenDataGridColumn TItem="Majors" Title="Major Requirements" Frozen="true" Width="0px">
            <Template Context="major">
                @(major.MajorRequirements != null ? string.Join(", ", major.MajorRequirements) : "无要求")
            </Template>
        </RadzenDataGridColumn>
    </Columns>
</RadzenDataGrid>

@code
{
    Mongo mongo = new Mongo("database");
    List<Majors> queryMajor;

    protected override async Task OnInitializedAsync()
    {
        queryMajor = mongo.LoadRecord<Majors>("majors");
    }
}

如果需要换行展示每个元素,可改用列表渲染:

<Template Context="major">
    @if (major.MajorRequirements != null && major.MajorRequirements.Length > 0)
    {
        <ul style="margin:0;padding-left:1.2rem;">
            @foreach (var req in major.MajorRequirements)
            {
                <li>@req</li>
            }
        </ul>
    }
    else
    {
        <span>无要求</span>
    }
</Template>

方法2:在实体类中添加计算属性

在Majors类中新增一个计算属性,返回拼接后的数组字符串,直接绑定该属性到DataGrid:

using MongoDB.Bson;
using MongoDB.Bson.Serialization.Attributes;

namespace project
{
    public class Majors
    {
        [BsonId]
        public BsonObjectId Id { get; set; }

        [BsonElement("Major")]
        public string Major { get; set; }

        [BsonElement("MajorRequirements")]
        public string[]? MajorRequirements { get; set; } = null;

        // 新增计算属性,用于DataGrid显示
        public string MajorRequirementsDisplay 
        {
            get 
            {
                return MajorRequirements != null ? string.Join(", ", MajorRequirements) : "无要求";
            }
        }
    }
}

然后在DataGrid中绑定该计算属性:

<RadzenDataGridColumn TItem="Majors" Property="MajorRequirementsDisplay" Title="Major Requirements" Frozen="true" Width="0px" />

注意事项

  • 方法1的模板列如需支持过滤,需手动实现过滤逻辑;方法2的计算属性可直接使用Radzen自带的过滤功能。
  • 处理数组时务必判空,避免空引用异常。

内容的提问来源于Stack Exchange,提问作者匿名

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 07:57:51