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

如何将数据库表列多行数据合并到GridView单个单元格?

实现GridView列非NULL数据合并为单个单元格(
换行分隔)

方法一:后台预处理数据源(推荐)

直接在绑定前将每列的非NULL值拼接成带<br>的字符串,逻辑清晰且性能更优。

VB后台代码修改

假设dt是从数据库获取的原始DataTable,处理后再绑定到GridView:

' 从数据库获取原始数据
Dim dt As DataTable = GetDataFromDatabase() ' 替换为你的数据库查询方法

' 创建用于存放合并后数据的DataTable
Dim mergedDt As New DataTable()
For Each col As DataColumn In dt.Columns
    mergedDt.Columns.Add(col.ColumnName, GetType(String))
Next

' 生成合并后的单行数据
Dim mergedRow As DataRow = mergedDt.NewRow()
For Each col As DataColumn In dt.Columns
    Dim sb As New StringBuilder()
    For Each row As DataRow In dt.Rows
        If Not row.IsNull(col) Then
            If sb.Length > 0 Then sb.Append("<br>")
            sb.Append(row(col).ToString())
        End If
    Next
    mergedRow(col.ColumnName) = sb.ToString()
Next
mergedDt.Rows.Add(mergedRow)

' 绑定到GridView
GridView1.DataSource = mergedDt
GridView1.DataBind()

ASPX前台代码

需设置列的HtmlEncode="false",确保<br>被解析为换行:

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False">
    <Columns>
        <asp:BoundField DataField="列名1" HeaderText="列标题1" HtmlEncode="false" />
        <asp:BoundField DataField="列名2" HeaderText="列标题2" HtmlEncode="false" />
        <!-- 其他列按此格式添加 -->
    </Columns>
</asp:GridView>

方法二:利用GridView的RowDataBound事件处理

若不想修改原始数据源,可在绑定阶段动态生成合并行:

VB后台代码

' 保存原始数据源到页面级变量
Private originalDt As DataTable

Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load
    If Not IsPostBack Then
        originalDt = GetDataFromDatabase() ' 替换为你的数据库查询方法
        ' 先绑定空数据以渲染表头
        GridView1.DataSource = New DataTable()
        GridView1.DataBind()
        ' 手动添加合并后的行
        AddMergedRow()
    End If
End Sub

Private Sub AddMergedRow()
    Dim mergedRow As New GridViewRow(-1, -1, DataControlRowType.DataRow, DataControlRowState.Normal)
    For Each col As DataColumn In originalDt.Columns
        Dim cell As New TableCell()
        Dim sb As New StringBuilder()
        For Each dr As DataRow In originalDt.Rows
            If Not dr.IsNull(col) Then
                If sb.Length > 0 Then sb.Append("<br>")
                sb.Append(dr(col).ToString())
            End If
        Next
        cell.Text = sb.ToString()
        cell.HtmlEncode = False
        mergedRow.Cells.Add(cell)
    Next
    GridView1.Controls(0).Controls.Add(mergedRow)
End Sub

ASPX前台代码

保持原有列定义即可:

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False">
    <Columns>
        <asp:BoundField DataField="列名1" HeaderText="列标题1" />
        <asp:BoundField DataField="列名2" HeaderText="列标题2" />
        <!-- 其他列按此格式添加 -->
    </Columns>
</asp:GridView>

注意事项

  • 必须开启HtmlEncode="false",否则<br>会被转义为纯文本,无法实现换行。
  • 若数据包含特殊字符(如<、>),需先用HttpUtility.HtmlEncode处理单个值,避免XSS风险。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 20:40:29