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

如何手动配置Syncfusion SfDataGrid嵌套视图并自定义列标题?

解决Syncfusion SfDataGrid嵌套视图手动定义列的问题

我已花费数小时尝试手动填充带有嵌套视图的Syncfusion SfDataGrid,尽管查阅了官方文档,但始终无法成功实现。将AutoGenerateRelations和AutoGenerateColumns设置为True时可以实现功能,但由于查询返回的字段名称对用户不友好,我需要手动定义列标题。

Nested Grid

问题根源

你的代码存在几个关键错误,导致手动配置的嵌套视图和列无法生效:

  • 重复声明DataSet,覆盖传入的数据源
  • 开启自动生成列后手动添加列,造成冲突
  • 嵌套网格的列错误添加到主网格的列集合
  • 变量拼写错误导致嵌套网格未正确关联
  • 嵌套视图的RelationalColumn配置错误

修正后的完整代码

Private Sub populateGrid(ByVal ds As DataSet)
    ' 避免重复添加数据关系
    If Not ds.Relations.Contains("InventoryItems") Then
        ds.Relations.Add(New DataRelation("InventoryItems", ds.Tables(0).Columns("JORNo"), ds.Tables(1).Columns("JORNo")))
    End If

    ' 主网格关闭自动生成,启用手动配置
    SfDataGrid1.AutoGenerateRelations = False
    SfDataGrid1.AutoGenerateColumns = False
    SfDataGrid1.DataSource = ds.Tables(0) ' 绑定到父表JORs

    ' 配置主网格的自定义列
    SfDataGrid1.Columns.Add(New GridTextColumn() With {.MappingName = "Doc ID", .HeaderText = "Doc ID"})
    SfDataGrid1.Columns.Add(New GridTextColumn() With {.MappingName = "Doctype", .HeaderText = "Document Type"})
    SfDataGrid1.Columns.Add(New GridTextColumn() With {.MappingName = "Crew", .HeaderText = "Crew"})
    SfDataGrid1.Columns.Add(New GridTextColumn() With {.MappingName = "JORNo", .HeaderText = "JOR No"})
    SfDataGrid1.Columns.Add(New GridTextColumn() With {.MappingName = "Salesman", .HeaderText = "Salesman"})
    SfDataGrid1.Columns.Add(New GridTextColumn() With {.MappingName = "Company", .HeaderText = "Company"})
    SfDataGrid1.Columns.Add(New GridTextColumn() With {.MappingName = "Well Name", .HeaderText = "Well Name"})
    SfDataGrid1.Columns.Add(New GridTextColumn() With {.MappingName = "Description", .HeaderText = "Description"})
    SfDataGrid1.Columns.Add(New GridTextColumn() With {.MappingName = "ScheduledDate", .HeaderText = "Shed Date"})
    SfDataGrid1.Columns.Add(New GridTextColumn() With {.MappingName = "Status", .HeaderText = "Status"})

    ' 创建并配置嵌套网格
    Dim nestedItemGrid As New SfDataGrid() With {.Name = "firstlevelnestedgrid", .AutoGenerateColumns = False}
    ' 给嵌套网格添加自定义列
    nestedItemGrid.Columns.Add(New GridTextColumn() With {.MappingName = "JORNo", .HeaderText = "JOR No"})
    nestedItemGrid.Columns.Add(New GridTextColumn() With {.MappingName = "product", .HeaderText = "Product ID"})
    nestedItemGrid.Columns.Add(New GridTextColumn() With {.MappingName = "description", .HeaderText = "Product Name"})
    nestedItemGrid.Columns.Add(New GridTextColumn() With {.MappingName = "QTYHours", .HeaderText = "QTY Hours"})
    nestedItemGrid.Columns.Add(New GridTextColumn() With {.MappingName = "rate", .HeaderText = "Rate"})
    nestedItemGrid.Columns.Add(New GridTextColumn() With {.MappingName = "cost", .HeaderText = "Cost"})
    nestedItemGrid.Columns.Add(New GridTextColumn() With {.MappingName = "partNo", .HeaderText = "Part Number"})

    ' 关联嵌套网格到数据关系
    Dim itemGridViewDef = New GridViewDefinition()
    itemGridViewDef.RelationalColumn = "InventoryItems"
    itemGridViewDef.DataGrid = nestedItemGrid

    ' 将嵌套视图添加到主网格
    SfDataGrid1.DetailsViewDefinitions.Add(itemGridViewDef)
End Sub

核心调整说明

  1. 数据源绑定:主网格直接绑定到父表ds.Tables(0),而非整个DataSet,确保层级关联正确。
  2. 关闭自动生成:必须关闭AutoGenerateColumns和AutoGenerateRelations,否则手动配置的列会被自动生成的列覆盖或冲突。
  3. 嵌套列独立配置:嵌套网格的列需单独添加到自身的Columns集合,不能和主网格列混加。
  4. 数据关系校验:添加数据关系前先判断是否存在,避免重复添加抛出异常。
  5. 修正变量拼写:修复grididviewdefinition的拼写错误,确保嵌套网格正确关联到视图定义。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 04:24:57