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

问题根源
你的代码存在几个关键错误,导致手动配置的嵌套视图和列无法生效:
- 重复声明
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
核心调整说明
- 数据源绑定:主网格直接绑定到父表
ds.Tables(0),而非整个DataSet,确保层级关联正确。 - 关闭自动生成:必须关闭
AutoGenerateColumns和AutoGenerateRelations,否则手动配置的列会被自动生成的列覆盖或冲突。 - 嵌套列独立配置:嵌套网格的列需单独添加到自身的
Columns集合,不能和主网格列混加。 - 数据关系校验:添加数据关系前先判断是否存在,避免重复添加抛出异常。
- 修正变量拼写:修复
grididviewdefinition的拼写错误,确保嵌套网格正确关联到视图定义。
内容的提问来源于stack exchange,提问作者RicEspn
相关产品推荐
相关产品推荐

