如何将标题置于DataGridView的列中?

Kei*_*ith 11 vb.net datagridview datagridviewcolumn winforms

我有一个奇怪的问题,这可能是一个简单的修复,但经过大量的研究,我似乎无法找到解决方案.

我有一个DataGridView我试图使列标题居中,但结果是在居中的左偏 - 几乎像一个缩进问题.我在一两个网站上看过一些关于这个问题的帖子,但从来没有一个解决方案.有什么想法吗?

这是我目前正在尝试使用的声明:

DataGridView1.ColumnHeadersDefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter
Run Code Online (Sandbox Code Playgroud)

Cod*_*ray 20

您发布的代码位于正确的轨道上:您需要设置控件的ColumnHeadersDefaultCellStyle属性DataGridView.

然而,你需要创建一个新的DataGridViewCellStyle类,并分配ColumnHeadersDefaultCellStyle财产.Alignment除非您已DataGridViewCellStyle为此属性指定了类,否则无法在代码示例显示时修改该属性.

因此,例如,以下代码在空白项目中实现了完美居中的列标题:

Dim dgvColumnHeaderStyle As New DataGridViewCellStyle()
dgvColumnHeaderStyle.Alignment = DataGridViewContentAlignment.MiddleCenter

myDataGridView.ColumnHeadersDefaultCellStyle = dgvColumnHeaderStyle
Run Code Online (Sandbox Code Playgroud)

 带有居中列标题的DataGridView


将来,您可能会发现从Designer中更容易完成这些类型的事情.如果您仍需要通过代码自行完成,则可以检查*.Designer.vb创建的文件以查看其完成方式.


编辑:我刚刚注意到你在列中引用的轻微偏移 - 它确实在每个标题的右侧创建了一些额外的填充.不过,这不是一个错误.有一个更简单的解释.

像a一样ListView,DataGridView支持按列排序.因此,每个列标题保留足够的空间以在计算中心对齐时显示排序字形(通常为箭头).

如果您希望列标题完全居中,则需要禁用排序.SortMode列的属性设置为"NonSortable".这样可以防止在列文本居中或右对齐时为排序字​​形保留空间.

  • 感谢你的快速回复.我注意到的是你得到了相同的左偏 - 每个标题都没有完全居中.我正在阅读一些似乎表明存在错误的信息,要求每个标题都填充一些空格,但显然它会根据列标题的长度而变化.它看起来是在文本之前添加的约2.5%的填充.显然,这听起来不像是一个解决方案.我尝试了几种方法,并继续做同样的事情.奇怪,是吧? (2认同)
  • 以防万一其他人出现.至少在.NET 4.5中,字段名称是"DataGridViewColumnSortMode.NotSortable"而不是NonSortable. (2认同)