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

VB.NET Windows Form中支持单格多数据加配图功能的控件如何选择

VB.NET实现多条目带图单元格的可行方案

原生控件可通过自定义扩展实现需求,无需完全替换DataGridView,以下是优先级从高到低的实现方案:

方案1:自定义DataGridView单元格(推荐)

改动最小、和现有DataGridView逻辑兼容最好的方案,实现步骤如下:

  • 继承DataGridViewImageCell或者直接重写所属列的CellPainting事件
  • 绘制逻辑逐行处理每个学生条目:每一行先绘制手机号图标,再绘制对应学生名称,按预设行高依次向下排列
  • 参考代码:
Private Sub DataGridView1_CellPainting(sender As Object, e As DataGridViewCellPaintingEventArgs) Handles DataGridView1.CellPainting
    ' 只处理目标列、非表头行
    If e.ColumnIndex = 目标列索引 AndAlso e.RowIndex >= 0 Then
        e.Handled = True
        e.PaintBackground(e.CellBounds, True)
        
        Dim students As List(Of Student) = CType(e.Value, List(Of Student))
        Dim drawPoint As Point = New Point(e.CellBounds.X + 2, e.CellBounds.Y + 2)
        Dim iconHeight As Integer = 16 ' 手机号图标预设高度
        
        For Each stu In students
            ' 绘制手机号图标
            e.Graphics.DrawImage(My.Resources.手机号图标, New Rectangle(drawPoint, New Size(16, 16)))
            ' 绘制学生名称
            e.Graphics.DrawString(stu.Name, e.CellStyle.Font, Brushes.Black, drawPoint.X + 20, drawPoint.Y)
            ' 下移绘制坐标
            drawPoint.Y += iconHeight + 4
        Next
        e.PaintContent(e.CellBounds)
    End If
End Sub
  • 补充配置:将该列的AutoSizeMode设为AllCells,重写CellFormatting事件动态计算单元格高度即可适配内容长度。

方案2:嵌套TableLayoutPanel

如果不需要复用DataGridView的排序、分页等原生能力,可直接用TableLayoutPanel做容器:

  • 外层TableLayoutPanel按行列布局你的表格结构
  • 对应需要多内容的单元格插入内层TableLayoutPanel,每行放一个PictureBox(放置手机号图标)+一个Label(放置学生名称)即可
  • 优势是布局完全可视化无需自定义绘制,劣势是数据量大时性能远低于DataGridView。

方案3:第三方控件(可选)

如果项目允许引入第三方控件,DevExpress GridControl、ComponentOne FlexGrid都原生支持单元格内多内容模板,直接配置模板即可实现需求,无需额外编码。

参考效果图

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.16 03:45:07