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
三、验证排查
- 调试时查看
table的列名和数据,确认查询返回了预期的交易记录 - 检查每个列的
DataPropertyName是否与DataTable的字段名完全匹配(注意大小写敏感性) - 确认JOIN逻辑正确,避免因关联条件错误导致数据缺失
内容的提问来源于stack exchange,提问作者Bambang Setiawan
相关产品推荐
相关产品推荐

