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

WinForm(VB.NET)中Infragistics UltraGrid跨数据源合并字段咨询

解决WinForm VB.NET中Infragistics UltraGrid合并字段的问题

为什么设计器修改不生效?

设计器里的列配置基于初始静态数据源,一旦运行时给UltraGrid绑定动态数据源(比如第一个Grid指定的数据源、第二个Grid的SQL查询结果),Grid会自动根据数据源结构重新生成列,设计器手动添加的列会被覆盖,因此不生效。

两种解决方案:

1. 数据源层面合并(推荐的快捷方式)

如果两个数据集存在关联键(比如主键ID),最省心的方式是直接在数据源层面合并,无需修改Grid设置:

  • 若第一个Grid的数据源也是SQL查询,直接修改查询语句,用JOIN关联第二个Grid的SQL查询结果,把需要的字段包含进来。示例:
    SELECT t1.*, t2.TargetField 
    FROM Table1 t1
    LEFT JOIN (第二个Grid的SQL查询语句) t2 ON t1.ID = t2.ID
    
  • 若第一个Grid的数据源是DataTable,第二个也是SQL查询得到的DataTable,可使用DataTable.Merge方法(需确保两表有匹配主键),或手动给第一个DataTable添加列后,通过关联键批量填充数据。

2. 代码实现动态合并

如果无法修改数据源(比如第一个数据源来自非SQL渠道),可通过代码手动处理:

  • 第一步:给第一个Grid的数据源添加目标字段
    ' 假设第一个Grid的数据源是DataTable
    Dim dtFirst As DataTable = DirectCast(UltraGrid1.DataSource, DataTable)
    ' 根据实际字段类型调整,添加要合并的字段
    If Not dtFirst.Columns.Contains("SecondGridField") Then
        dtFirst.Columns.Add("SecondGridField", GetType(String))
    End If
    
  • 第二步:根据关联键匹配并填充数据
    Dim dtSecond As DataTable = DirectCast(UltraGrid2.DataSource, DataTable)
    ' 遍历第一个表的行,匹配第二个表的数据
    For Each rowFirst As DataRow In dtFirst.Rows
        ' 替换为你的实际关联字段(比如ID)
        Dim matchRow = dtSecond.AsEnumerable().FirstOrDefault(Function(r) r("ID").ToString() = rowFirst("ID").ToString())
        If matchRow IsNot Nothing Then
            ' 替换为你要合并的目标字段名
            rowFirst("SecondGridField") = matchRow("TargetField").ToString()
        End If
    Next
    ' 刷新Grid显示
    UltraGrid1.Refresh()
    
  • 额外:若需动态给Grid添加列(未提前在数据源中添加),可在UltraGrid1_InitializeLayout事件中处理:
    Private Sub UltraGrid1_InitializeLayout(sender As Object, e As InitializeLayoutEventArgs) Handles UltraGrid1.InitializeLayout
        ' 添加列并设置显示属性
        Dim newCol As UltraGridColumn = e.Layout.Bands(0).Columns.Add("SecondGridField")
        newCol.Header.Caption = "从第二个Grid合并的字段"
        newCol.Visible = True
    End Sub
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 16:50:19