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
相关产品推荐
相关产品推荐

