如何使用嵌套视图填充 Syncfusion sfDataGrid?

问题描述 投票:0回答:1

我已经尝试了好几个小时来用嵌套视图手动填充网格,我已经阅读了文档,但由于某种原因我无法让它工作。我可以通过将 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
vb.net syncfusion sfdatagrid
1个回答
0
投票

方法一:

您可以在

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)
© www.soinside.com 2019 - 2024. All rights reserved.