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

VB.Net下手动设置DataGridView表头展示交易数据遇问题

解决DataGridView自定义表头与数据展示问题

一、关闭自动列生成,手动配置表头

你当前代码设置了AutoGenerateColumns = True,这会让DataGridView直接用数据库字段名作为表头,无法自定义显示文本。要实现自定义表头,需按以下方式操作:

方法1:设计器可视化配置(推荐)

  • 打开DataGridView的列编辑窗口,逐个添加需要的列:
    • 设置HeaderText为你想要的表头文字(比如把ProdCode改成「产品编码」)
    • 设置DataPropertyName为SQL查询结果对应的字段名(需和查询语句里的字段名完全一致,比如ProdCode、ProdName)
    • 按需调整列的顺序、宽度、对齐方式等属性

方法2:代码动态创建列

如果需要动态生成列,可在绑定数据前添加以下代码:

dtproductdetail.AutoGenerateColumns = False
dtproductdetail.Columns.Clear()

' 产品编码列
Dim colProdCode As New DataGridViewTextBoxColumn()
colProdCode.HeaderText = "产品编码"
colProdCode.DataPropertyName = "ProdCode"
dtproductdetail.Columns.Add(colProdCode)

' 产品名称列
Dim colProdName As New DataGridViewTextBoxColumn()
colProdName.HeaderText = "产品名称"
colProdName.DataPropertyName = "ProdName"
dtproductdetail.Columns.Add(colProdName)

' 数量列
Dim colQty As New DataGridViewTextBoxColumn()
colQty.HeaderText = "数量"
colQty.DataPropertyName = "QTY"
dtproductdetail.Columns.Add(colQty)

' 包装类型列
Dim colPackingName As New DataGridViewTextBoxColumn()
colPackingName.HeaderText = "包装类型"
colPackingName.DataPropertyName = "PackingName"
dtproductdetail.Columns.Add(colPackingName)

二、优化查询代码,修复展示异常并规避风险

当前SQL用字符串拼接参数,存在SQL注入风险,也可能因数据类型不匹配导致展示异常,改成参数化查询:

Private Sub fillform()
    Dim table As New DataTable
    dtproductdetail.DataSource = Nothing

    Try
        ' 参数化查询语句
        cmddetail = New SqlCommand("SELECT AP_T_PR_D.ProdCode, IV_M_Product.ProdName, AP_T_PR_D.QTY, IV_M_PackingType.PackingName
                        FROM IV_M_PackingType RIGHT OUTER JOIN
                        IV_M_Product ON IV_M_PackingType.PackingCode = IV_M_Product.PackingCodeDown RIGHT OUTER JOIN
                        AP_T_PR_D ON IV_M_Product.ProdCode = AP_T_PR_D.ProdCode
                        WHERE AP_T_PR_D.PRNumber = @PRNumber", conn)
        ' 添加查询参数
        cmddetail.Parameters.AddWithValue("@PRNumber", selectedrow.Cells(0).Value.ToString())

        Adp = New SqlDataAdapter(cmddetail)
        Adp.Fill(table)
        
        ' 关闭自动列生成,使用手动配置的列
        dtproductdetail.AutoGenerateColumns = False
        dtproductdetail.DataSource = table
        dtproductdetail.Refresh()

    Catch ex As Exception
        MessageBox.Show(ex.Message, "fillform", MessageBoxButtons.OK, MessageBoxIcon.Error)
    End Try
End Sub

三、验证排查

  1. 调试时查看table的列名和数据,确认查询返回了预期的交易记录
  2. 检查每个列的DataPropertyName是否与DataTable的字段名完全匹配(注意大小写敏感性)
  3. 确认JOIN逻辑正确,避免因关联条件错误导致数据缺失

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 09:05:14