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

VB.NET新手求助:使用数组合并DataGrid中空行前的所有行

VB.NET合并DataGrid中空行前所有行的实现方案

核心思路

先取出DataGrid绑定的DataTable,用数组列表暂存空行前的所有行数据,遇到空行时将数组里的内容合并成一行存入新表,最后把新表重新绑定到DataGrid。

具体代码实现

假设你的DataGrid控件名为DataGridView1,绑定的数据源是DataTable,代码如下:

' 获取原DataTable(假设DataGrid已绑定DataTable)
Dim originalTable As DataTable = DirectCast(DataGridView1.DataSource, DataTable)
' 创建用于存储合并结果的新DataTable,结构和原表一致
Dim mergedTable As DataTable = originalTable.Clone()

' 用列表暂存需要合并的行数据(数组形式)
Dim tempRowData As New List(Of String())

' 遍历原表的每一行
For Each row As DataRow In originalTable.Rows
    ' 判断当前行是否为空行(这里判断所有列都为空才算空行,可按需调整)
    Dim isEmptyRow As Boolean = True
    For Each col As DataColumn In originalTable.Columns
        If Not String.IsNullOrEmpty(row(col).ToString().Trim()) Then
            isEmptyRow = False
            Exit For
        End If
    Next

    If Not isEmptyRow Then
        ' 非空行,将行数据转为字符串数组存入临时列表
        Dim rowArray(originalTable.Columns.Count - 1) As String
        For i As Integer = 0 To originalTable.Columns.Count - 1
            rowArray(i) = row(i).ToString().Trim()
        Next
        tempRowData.Add(rowArray)
    Else
        ' 遇到空行,合并临时列表里的所有行
        If tempRowData.Count > 0 Then
            Dim newRow As DataRow = mergedTable.NewRow()
            ' 逐列合并数据(用换行符分隔,可替换为逗号、分号等)
            For colIndex As Integer = 0 To originalTable.Columns.Count - 1
                Dim mergedText As String = ""
                For Each arr In tempRowData
                    If Not String.IsNullOrEmpty(arr(colIndex)) Then
                        mergedText &= arr(colIndex) & vbCrLf
                    End If
                Next
                ' 去掉末尾多余的换行符
                newRow(colIndex) = mergedText.TrimEnd(vbCrLf.ToCharArray())
            Next
            mergedTable.Rows.Add(newRow)
            ' 重置临时列表,准备处理下一组
            tempRowData.Clear()
        End If
    End If
Next

' 处理最后一组(如果原表末尾没有空行的情况)
If tempRowData.Count > 0 Then
    Dim newRow As DataRow = mergedTable.NewRow()
    For colIndex As Integer = 0 To originalTable.Columns.Count - 1
        Dim mergedText As String = ""
        For Each arr In tempRowData
            If Not String.IsNullOrEmpty(arr(colIndex)) Then
                mergedText &= arr(colIndex) & vbCrLf
            End If
        Next
        newRow(colIndex) = mergedText.TrimEnd(vbCrLf.ToCharArray())
    Next
    mergedTable.Rows.Add(newRow)
End If

' 将合并后的表绑定回DataGrid
DataGridView1.DataSource = mergedTable

细节调整说明

  • 空行判断:如果你的空行判断标准不是“所有列为空”(比如某特定列空就算空行),直接修改isEmptyRow的判断逻辑即可。
  • 合并分隔符:代码中用换行符vbCrLf拼接内容,你可以换成逗号、分号等其他符号,只需要修改合并时的拼接字符。
  • 数据源适配:如果你的DataGrid绑定的不是DataTable,需要先将数据源转换为DataTable再执行上述逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 15:16:02