我已经尝试了好几个小时来用嵌套视图手动填充网格,我已经阅读了文档,但由于某种原因我无法让它工作。我可以通过将 AutoGenerateRelations 和 AutoGenerateColumns 设置为 true 来实现。但是我需要手动定义列标题文本,因为来自查询的名称不是用户可读的。
Private Sub populateGrid(byval ds as DataSet)
Dim ds As New DataSet()
ds.Tables.Add(JORs)
ds.Tables.Add(JORItems)
ds.Relations.Add(New DataRelation("InventoryItems", ds.Tables(0).Columns("JORNo"), ds.Tables(1).Columns("JORNo")))
SfDataGrid1.AutoGenerateRelations = True
SfDataGrid1.AutoGenerateColumns = True
SfDataGrid1.DataSource = ds
'gridviewdefinition for datagrid
Dim gridviewdefinition = New GridViewDefinition()
gridviewdefinition.RelationalColumn = "InventoryItems"
grididviewdefinition.DataGrid = New SfDataGrid() With {.Name = "firstlevelnestedgrid", .AutoGenerateColumns = False}
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 gridviewdefinition2 = New GridViewDefinition()
gridviewdefinition2.RelationalColumn = "JORNo"
gridviewdefinition2.DataGrid = New SfDataGrid() With {.Name = "secodlevelnestedgrid", .AutoGenerateColumns = False}
SfDataGrid1.Columns.Add(New GridTextColumn() With {.MappingName = "JORNo", .HeaderText = "JOR No"})
SfDataGrid1.Columns.Add(New GridTextColumn() With {.MappingName = "product", .HeaderText = "Product ID"})
SfDataGrid1.Columns.Add(New GridTextColumn() With {.MappingName = "description", .HeaderText = "Product Name"})
SfDataGrid1.Columns.Add(New GridTextColumn() With {.MappingName = "QTYHours", .HeaderText = "QTY Hours"})
SfDataGrid1.Columns.Add(New GridTextColumn() With {.MappingName = "rate", .HeaderText = "Rate"})
SfDataGrid1.Columns.Add(New GridTextColumn() With {.MappingName = "cost", .HeaderText = "Cost"})
SfDataGrid1.Columns.Add(New GridTextColumn() With {.MappingName = "partNo", .HeaderText = "Part Number"})
SfDataGrid1.DetailsViewDefinitions.Add(gridviewdefinition)
SfDataGrid1.DetailsViewDefinitions.Add(gridviewdefinition2)
End Sub
方法一:
您可以在
AutoGenerateColumns and AutoGenerateRelations are set to true
通过处理 AutoGeneratingColumn 事件时修改父 DataGrid 和 DetailsView DataGrid 的列标题文本。这是一个示例代码片段:
Dim DataSource As DataTable = GetDataTable()
sfDataGrid1.AutoGenerateColumns = True
sfDataGrid1.AutoGenerateRelations = True
sfDataGrid1.AutoGeneratingColumn += SfDataGrid1_AutoGeneratingColumn
sfDataGrid1.AutoGeneratingRelations += SfDataGrid1_AutoGeneratingRelations
sfDataGrid1.DataSource = DataSource
Private Sub SfDataGrid1_AutoGeneratingColumn(ByVal sender As Object, ByVal
e As Syncfusion.WinForms.DataGrid.Events.AutoGeneratingColumnArgs)
'Here you can set your own column name based on its mapping name for
'Parent DataGrid
If e.Column.MappingName = "JORNo" Then
e.Column.HeaderText = "Changed Name"
End Sub
Private Sub SfDataGrid1_AutoGeneratingRelations(ByVal sender As Object,
ByVal e As
Syncfusion.WinForms.DataGrid.Events.AutoGeneratingRelationsEventArgs)
'In the DetailsViewDataGrid we should wire the AutoGeneratingColumn
'event for details grid.
e.GridViewDefinition.DataGrid.AutoGeneratingColumn +=
DataGrid_AutoGeneratingColumn
End Sub
Private Sub DataGrid_AutoGeneratingColumn(ByVal sender As Object, ByVal e
As Syncfusion.WinForms.DataGrid.Events.AutoGeneratingColumnArgs)
'Here you can set your own column name based on its mapping name for
'Details View DataGrid
If e.Column.MappingName = "JORNo" Then
e.Column.HeaderText = "Changed Name"
End Sub
方法二:
当
AutoGenerateColumns and AutoGenerateRelations properties are set to false
. 时,您可以通过手动将列添加到 DataGrid 来更改列的 HeaderText
this.sfDataGrid1.AutoGenerateRelations = false;
this.sfDataGrid1.AutoGenerateColumns = false;
'columns for Parent Grid
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"})
Dim jORgridviewdefinition = New GridViewDefinition()
'Set the Relation here
jORgridviewdefinition.RelationalColumn = "JORNo"
Dim childGrid As SfDataGrid = New SfDataGrid()
childGrid.AllowResizingColumns = True
childGrid.AutoGenerateColumns = False
childGrid.Columns.Add(New GridTextColumn() With {.MappingName = "JORNo",
.HeaderText = "JOR No"})
childGrid.Columns.Add(New GridTextColumn() With {.MappingName = "QTYHours",
.HeaderText = "QTY Hours"})
jORgridviewdefinition.DataGrid = childGrid
'Add your relational definition to the datagrid ie. ParentGrid.
Me.sfDataGrid1.DetailsViewDefinitions.Add(jORgridviewdefinition)