Henry手记—从Datagrid的标题居中说起

原创 2003年02月21日 09:37:00

                            Henry手记Datagrid的标题居中说起<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

                               韩睿  ( 02/20/2003)

 

编程的乐趣是什么?相信各人都有自己的见解。Henry最大的快乐是享受创造的喜悦,而且这种喜悦都是建立在可以看得到的实践上的。今天这篇小文源头很简单,是我中午在CSDN论坛上看到一个网友发的帖子,当时也回了帖,但话语不详,更重要的是下午稍稍一试,得到了两种实现的方法,不亦乐乎,尽管事务缠身,也赶紧记下。

命题:如果在.NET中使Datagrid的标题文字居中。

分析一:

这个命题似乎不难,主要是Datagrid作者没有提供CaptionAlign这样的属性给大家,所以……

那么怎么解决它呢?我想到最直接的方法,就是给标题文字前面加上适当的空格数,使标题文字推到中间去。好,说做就做。

(1)      要知道在当前环境下,Datagrid标题栏一个英文字符占据了多大的宽度;

(2)      Datagrid的宽度/字符宽度=标题栏所能容纳的字符数

(3)      给已有标题的文本前面添加n个空格,n=(标题栏所能容纳的字符数-已有标题的字符数)/2

代码如下所示:

Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load

        Dim perWidth As Integer 一个英文字符占据的宽度

        Dim count As Integer 标题栏所能容纳的字符数

        Dim len As Integer已有标题的字符数

        Dim i As Integer

        With Graphics.FromHwnd(DataGrid1.Handle).MeasureString(Text:="ABCDEFGHIJKLMNOPQRSTUVWXYZ", Font:=DataGrid1.Font)

            perWidth = CInt(.Width / 26.0!)

        End With

        count = DataGrid1.Width / perWidth

        len = System.Text.Encoding.Default.GetByteCount(DataGrid1.CaptionText)

        For i = 1 To (count - len) / 2

            DataGrid1.CaptionText = " " + DataGrid1.CaptionText

        Next

End Sub

要点1如何计算一个英文字符的宽度,见代码

要点2如何获得标题文本所占的字符数,要知道英文占一个字节,中文是占两个字节。解决方法就是用System.Text.Encoding.Default.GetByteCount来做。这些技巧还是很有用的,望牢记!

另外,您可以用String.PadLeft属性来试试填充空字符串

结果如图一所示:

 

1 第一种方案:加空格

分析二

但认真一想,这种方法还是不爽,智能化不够,于是乎就有了这种方法。即把标题文字写入一个Label里面去,然后把Label嵌入到datagrid中去,动态地调整Label的位置,不就结了!

Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load

        LabCaption.BackColor = Color.Transparent  设为透明色

        LabCaption.AutoSize = True ‘设为可根据文本内容自动调整文本框大小

        LabCaption.BorderStyle = BorderStyle.None ‘设为无边框

        LabCaption.ForeColor = Color.White  ‘前景色设为白色,就是文字是白色字

        DataGrid1.Controls.Add(LabCaption)  ‘将文本框嵌入Datagrid中去

        LabCaption.Top = 5‘设置高度,0指的是datagrid的头部位置

        LabCaption.Left = (DataGrid1.Width - LabCaption.Width) / 2 ‘设置居中

End Sub

 

 

2 第二种方案:嵌入文本框

从图2中我们可以看到整个的实现过程,当然也有小技巧值得一说:

要点1设置文本框底色为透明。只写一句LabCaption.BackColor = Color.Transparent是不行的,这样的话,系统会将背景色设置为Form的底色,因为透明是相对的嘛,想想变色龙的原理就明白了。我们得设置一步:LabCaption.Parent = DataGrid1这样才行,或者是和上述代码中所写的用:DataGrid1.Controls.Add(LabCaption)也可以。这里Parent属性在弹出菜单里没有,别管它,写上就行了。

要点2很遗憾,这种简单的方法需要把Datagridborderstyle设为NoneSingle,设为3D的时候Label也会有个小边框。

 

一个简单的命题,带给我们思考的喜悦,祝您也一样在工作与学习中获得更多的欣喜!

----

声明:本文版权与解释权归韩睿所有,如需转载,请保留完整的内容及此声明。

QQ: 18349592

E-Mail: henry7685@hotmail.com

     请访问本人专栏:http://www.csdn.net/develop/author/netauthor/Latitude/

 

easyui中datagrid标题居中内容居左实现方式

原文出处:http://www.itnose.net/detail/6012529.html easyui中的datagrid使用起来,确实还是挺轻巧方便,但是其中也有不少的...
  • zhg09shanshui163
  • zhg09shanshui163
  • 2015年04月30日 11:10
  • 700

WPF 如何让DataGrid中的列标题居中

  • zhengxiaotaozz
  • zhengxiaotaozz
  • 2017年05月24日 10:57
  • 1482

EasyUI datagrid 实现标题居中,内容居左的方法

源码中内容: cell.css("text-align",(col.halign||col.align||""));   这里有个属性挺眼熟 : col.align   ...
  • xiaozaq
  • xiaozaq
  • 2016年08月25日 20:24
  • 9439

datagrid详细操作单元格样式 设置列标题居中而列内容居右显示

仔细查了一下api,目前版本提供了两个相关的列属性,align和styler。align属性设置后会让列标题和列内容的对齐方式一致,而styler是作用于列内容上的,只是可惜了,styler只能定位到...
  • wang_lianglove
  • wang_lianglove
  • 2013年12月05日 22:11
  • 1738

jquery easyUI中字段列标题居中,数值居右的问题

--------------------------亲测有效 jquery easyUI
  • Yuli_li
  • Yuli_li
  • 2016年05月25日 10:01
  • 2415

Henry手记:Datagrid事件响应

                                                Henry手记 - Datagrid事件响应                              ...
  • Latitude
  • Latitude
  • 2003年01月02日 09:21
  • 5718

完美解决在wpf datagrid让列标题居中以及列内容居中

一般我们要实现居中设置 HorizontalContentAlignment="Center" VerticalContentAlignment="Center"就可以了, 但是datagrid的Da...
  • nishiayan
  • nishiayan
  • 2012年11月13日 11:03
  • 12054

Henry手记-Datagrid事件响应(二)

                                        Henry手记 - Datagrid事件响应(二)                                   ...
  • Latitude
  • Latitude
  • 2003年05月08日 12:10
  • 2337

flex spark DataGrid 每列的label居中显示

在flex4 里面,spark的DataGrid的列中的label 不能居中显示。也无法设置。 可以在每列中设置一下headerRenderer。 headerRend...
  • atomcrazy
  • atomcrazy
  • 2013年06月14日 10:46
  • 5812

WPF下DataGrid header 居中及分隔线等属性设置

DataGrid标题头居中属性设置HorizontalContentAlignment、分割线设置、背景色、前景色等设置:...
  • mpegfour
  • mpegfour
  • 2017年12月03日 20:39
  • 195
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Henry手记—从Datagrid的标题居中说起
举报原因:
原因补充:

(最多只允许输入30个字)