关键词:
最近非常频繁的使用DataGridView控件,VS提供的Winform下DataGridView的默认样式非常难看。如果做美化处理的话,需要调整的地方非常多,且该控件的很多设置属性非常的晦涩,不是很人性化。每次进行设置都煞费脑筋,并且需要设置的DataGridView控件又比较多,如果手工一个一个调整非常麻烦。如果在每个窗体里逐个一行一行的用代码来设置,会造成代码很凌乱、琐碎,因此我对DataGridView格式设置的常用项封装到一个Helper类,通过这个帮助类可以一步到位完成设置。
对DataGridView控件,我需要完成的一些基本的格式控制,包括以下一些内容:
1、标题行背景色、前景色、字体设置、平面化样式、行高
2、标题列宽度,平面化样式
3、偶数行背景色、前景色
4、奇数行背景色、前景色
5、数据行高度、字体
6、列宽度,对齐方式
7、禁止编辑、添加、删除、调整行高、列宽、排序
8、去除控件外边框
最终处理过后的风格类似如下图所示
最终我所希望的实现格式化DataGridView控件的形式是通过一行代码来实现,类似如下所示:
1 Dim mGridHelper As New CGridHelper(GridVersion, Color.FromArgb(250, 250, 250), 2 New Font("微软雅黑", 10), 30, Color.FromArgb(159, 210, 235), Color.FromArgb(0, 0, 0), 24, 3 New Font("微软雅黑", 9), 30, Color.FromArgb(250, 250, 250), Color.FromArgb(225, 225, 225), Color.FromArgb(0, 0, 0), 4 "0;80;70;595", "M;M;M;L")
其中列宽的控制通过一个字符串来设置,用分号来分隔数字,各数字依次设置对应列的宽度;列的对齐方式也类似,不过左、中、右分别用字母L/M/R表示。
接下来直接上CGridHelper类模块的代码了,代码还比较粗糙,但是满足我自己的需求就够了。
1 Public Class CGridHelper 2 Private mGrid As DataGridView 3 Public Property Grid() As DataGridView 4 Get 5 Return mGrid 6 End Get 7 Set(ByVal value As DataGridView) 8 mGrid = value 9 mGrid.BorderStyle = BorderStyle.None 10 mGrid.ColumnHeadersBorderStyle = DataGridViewHeaderBorderStyle.Single 11 mGrid.ColumnHeadersDefaultCellStyle.WrapMode = DataGridViewTriState.False 12 mGrid.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.DisableResizing 13 mGrid.RowHeadersBorderStyle = DataGridViewHeaderBorderStyle.Single 14 mGrid.RowHeadersWidthSizeMode = DataGridViewRowHeadersWidthSizeMode.DisableResizing 15 mGrid.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.None 16 mGrid.DefaultCellStyle.WrapMode = DataGridViewTriState.True 17 mGrid.EnableHeadersVisualStyles = False 18 mGrid.AllowUserToResizeRows = False 19 mGrid.SelectionMode = DataGridViewSelectionMode.FullRowSelect 20 mGrid.ReadOnly = True 21 mGrid.AllowUserToAddRows = False 22 mGrid.AllowUserToDeleteRows = False 23 For i = 0 To mGrid.Columns.Count - 1 24 mGrid.Columns(i).SortMode = DataGridViewColumnSortMode.NotSortable 25 Next 26 End Set 27 End Property 28 29 Private mOddRowBackColor As Color 30 Public Property OddRowBackColor() As Color 31 Get 32 Return mOddRowBackColor 33 End Get 34 Set(ByVal value As Color) 35 mOddRowBackColor = value 36 If mGrid.Rows.Count = 0 Then Exit Property 37 For i = 0 To mGrid.Rows.Count - 1 Step 2 38 mGrid.Rows(i).DefaultCellStyle.BackColor = value 39 Next 40 End Set 41 End Property 42 43 Private mHeaderBackColor As Color 44 Public Property HeaderBackColor() As Color 45 Get 46 Return mHeaderBackColor 47 End Get 48 Set(ByVal value As Color) 49 mHeaderBackColor = value 50 mGrid.ColumnHeadersDefaultCellStyle.BackColor = value 51 End Set 52 End Property 53 54 Private mEvenRowBackColor As Color 55 Public Property EvenRowBackColor() As Color 56 Get 57 Return mEvenRowBackColor 58 End Get 59 Set(ByVal value As Color) 60 mEvenRowBackColor = value 61 If mGrid.Rows.Count = 0 Then Exit Property 62 For i = 1 To mGrid.Rows.Count - 1 Step 2 63 mGrid.Rows(i).DefaultCellStyle.BackColor = value 64 Next 65 End Set 66 End Property 67 68 Private mGridColor As Color 69 Public Property GridColor() As Color 70 Get 71 Return mGridColor 72 End Get 73 Set(ByVal value As Color) 74 mGridColor = value 75 mGrid.GridColor = value 76 End Set 77 End Property 78 79 Private mColumnWidth As String 80 Public Property ColumnWidth() As String 81 Get 82 Return mColumnWidth 83 End Get 84 Set(ByVal value As String) 85 mColumnWidth = value 86 Dim mColCount As Integer = mGrid.ColumnCount 87 Dim mWidths() As String = value.Split(";") 88 For i = 0 To mWidths.Length - 1 89 If i + 1 > mColCount Then Exit For 90 If mWidths(i) <= 0 Then 91 mGrid.Columns(i).Visible = False 92 Else 93 mGrid.Columns(i).Width = mWidths(i) 94 End If 95 Next 96 End Set 97 End Property 98 99 Private mColumnAlignment As String 100 Public Property ColumnAlignment() As String 101 Get 102 Return mColumnAlignment 103 End Get 104 Set(ByVal value As String) 105 mColumnAlignment = value 106 Dim mColCount As Integer = mGrid.ColumnCount 107 Dim mAlignments() As String = value.Split(";") 108 For i = 0 To mAlignments.Length - 1 109 If i + 1 > mColCount Then Exit For 110 Select Case mAlignments(i) 111 Case Is = "L" 112 mGrid.Columns(i).DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleLeft 113 Case Is = "R" 114 mGrid.Columns(i).DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight 115 Case Is = "M" 116 mGrid.Columns(i).DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter 117 Case Else 118 mGrid.Columns(i).DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleLeft 119 End Select 120 Next 121 End Set 122 End Property 123 124 Private mHeaderFont As Font 125 Public Property HeaderFont() As Font 126 Get 127 Return mHeaderFont 128 End Get 129 Set(ByVal value As Font) 130 mHeaderFont = value 131 mGrid.ColumnHeadersDefaultCellStyle.Font = value 132 End Set 133 End Property 134 135 Private mHeaderHeight As Integer 136 Public Property HeaderHeight() As Integer 137 Get 138 Return mHeaderHeight 139 End Get 140 Set(ByVal value As Integer) 141 mHeaderHeight = value 142 mGrid.ColumnHeadersHeight = value 143 End Set 144 End Property 145 146 Private mHeaderForeColor As Color 147 Public Property HeaderForeColor() As Color 148 Get 149 Return mHeaderForeColor 150 End Get 151 Set(ByVal value As Color) 152 mHeaderForeColor = value 153 mGrid.ColumnHeadersDefaultCellStyle.ForeColor = value 154 End Set 155 End Property 156 157 Private mRowHeaderWidth As Integer 158 Public Property RowHeaderWidth() As Integer 159 Get 160 Return mRowHeaderWidth 161 End Get 162 Set(ByVal value As Integer) 163 mRowHeaderWidth = value 164 mGrid.RowHeadersWidth = value 165 End Set 166 End Property 167 168 Private mRowHeight As Integer 169 Public Property RowHeight() As Integer 170 Get 171 Return mRowHeight 172 End Get 173 Set(ByVal value As Integer) 174 mRowHeight = value 175 For i = 0 To mGrid.Rows.Count - 1 176 mGrid.Rows(i).Height = value 177 Next 178 End Set 179 End Property 180 181 Private mRowFont As Font 182 Public Property RowFont() As Font 183 Get 184 Return mRowFont 185 End Get 186 Set(ByVal value As Font) 187 mRowFont = value 188 mGrid.RowsDefaultCellStyle.Font = value 189 End Set 190 End Property 191 192 Private mBackColor As Color 193 Public Property BackColor() As Color 194 Get 195 Return mBackColor 196 End Get 197 Set(ByVal value As Color) 198 mBackColor = value 199 mGrid.BackgroundColor = value 200 End Set 201 End Property 202 203 Public Sub New(TargetGrid As DataGridView, BackColor As Color, HeaderFont As Font, HeaderHeight As Integer, 204 HeaderBackColor As Color, HeaderForeColor As Color, RowHeaderWidth As Integer, 205 RowFont As Font, RowHeight As Integer, OddRowBackColor As Color, EvenRowBackColor As Color, 206 GridColor As Color, ColumnWidth As String, ColumnAlignment As String) 207 Me.Grid = TargetGrid 208 Me.BackColor = BackColor 209 210 Me.HeaderFont = HeaderFont 211 Me.HeaderHeight = HeaderHeight 212 Me.HeaderBackColor = HeaderBackColor 213 Me.HeaderForeColor = HeaderForeColor 214 Me.RowHeaderWidth = RowHeaderWidth 215 216 Me.RowFont = RowFont 217 Me.RowHeight = RowHeight 218 Me.OddRowBackColor = OddRowBackColor 219 Me.EvenRowBackColor = EvenRowBackColor 220 221 Me.GridColor = GridColor 222 Me.ColumnWidth = ColumnWidth 223 Me.ColumnAlignment = ColumnAlignment 224 End Sub 225 226 Public Sub ReSetStyle() 227 ReSetStyle(Me.BackColor, Me.HeaderFont, Me.HeaderHeight, Me.HeaderBackColor, Me.HeaderForeColor, Me.RowHeaderWidth, 228 Me.RowFont, Me.RowHeight, Me.OddRowBackColor, Me.EvenRowBackColor, Me.GridColor, Me.ColumnWidth, Me.ColumnAlignment) 229 End Sub 230 231 Private Sub ReSetStyle(BackColor As Color, HeaderFont As Font, HeaderHeight As Integer, 232 HeaderBackColor As Color, HeaderForeColor As Color, RowHeaderWidth As Integer, 233 RowFont As Font, RowHeight As Integer, OddRowBackColor As Color, EvenRowBackColor As Color, 234 GridColor As Color, ColumnWidth As String, ColumnAlignment As String) 235 Me.BackColor = BackColor 236 237 Me.HeaderFont = HeaderFont 238 Me.HeaderHeight = HeaderHeight 239 Me.HeaderBackColor = HeaderBackColor 240 Me.HeaderForeColor = HeaderForeColor 241 Me.RowHeaderWidth = RowHeaderWidth 242 243 Me.RowFont = RowFont 244 Me.RowHeight = RowHeight 245 Me.OddRowBackColor = OddRowBackColor 246 Me.EvenRowBackColor = EvenRowBackColor 247 248 Me.GridColor = GridColor 249 Me.ColumnWidth = ColumnWidth 250 Me.ColumnAlignment = ColumnAlignment 251 End Sub 252 End Class
关于winform下datagridview控件行的选择的问题
我在DataGridView1控件中显示考题的信息,双击某一行考题后可以将这行考题添加到DataGridView2,考题有分类QuestionsType字段,我想在选择了QuestionsType的值是A的考题后,设置QuestionsType的值为B的考题都为不可选考题,有什么办法可以... 查看详情
winform中datagridview控件的列名怎样实现多表头?
</img>参考技术A用2个datagridview控件,上面那个就一个表头,去掉其他的编辑,修改和添加属性,下面的那个才是绑定数据库的,如果你的列能自定义宽度,则还需要在这2个控件上添加列宽变化事件,使得上下2个控件列宽统一下. 参考... 查看详情
winform控件之datagridview数据控件显示问题
... 最近在做同类的信息记录管理系统时遇到了DataGridView数据控件的显示问题,可能是2015年的上半年没有深入学习C#开发的原因,这几天重新搬出来开发,首先遇到的问题就是动态绑定数据显示的问题,琢磨了很久,在... 查看详情
在c#,winform下怎样实现使用打印控件printdocument来打印datagridview里的内容?
...,还有,我用的三层架构的模式,把数据查询出来显示在datagridview中,要打印的话,你的代码我需要怎么修改呢?偶是小白,求教。。。本回答被提问者采纳 参考技术B建议用这种方式:DataGridView中的数据导出Excel,可以选择是... 查看详情
如何阻止 Winforms 面板滚动?
...:2010-09-3000:07:35【问题描述】:如果您将一个400像素高的DataGridView放在一个300像素高的面板上,这样面板上就会有一个滚动条,然后向下滚动以显示网格的下半部分,然后单击一个控件在面板外,然后单击网格中的一行,面板向... 查看详情
winform控件之datagridview数据控件显示问题
... 近期在做同类的信息记录管理系统时遇到了DataGridView数据控件的显示问题。可能是2015年的上半年没有深入学习C#开发的原因。这几天又一次搬出来开发,首先遇到的问题就是动态绑定数据显示的问题。琢磨了非常久... 查看详情
c#winform的datagridview控件单元格颜色报警
刚刚学习C#程序我在FORM1下添加了dataGridView绑定了数据dataGridView1.DataSource=ds1.Tables[0];设置cell单元格时没有效果具体代码如下:dataGridView1.DataSource=ds1.Tables[0];this.dataGridView1[0,0].Style.BackColor=Color.Pink;//无效果//this.dataGridView1.Columns[0].Def... 查看详情
winform一个窗口调用另外一个窗口的控件
form2是form1show出来的窗口form1里DataGridView中有checkbox控件我要得到DataGridView中的checkbox是否选中就是总得不到form1中的控件无法循环判断是否选中简单啊,构造函数,或者属性注入都可以的。建议将Form1的是否选中定义一个PublicboolIs... 查看详情
我们如何在winform的datagridview中进行分页
】我们如何在winform的datagridview中进行分页【英文标题】:Howcanwedopaginationindatagridviewinwinform【发布时间】:2011-02-1900:37:20【问题描述】:我想在窗口窗体的datagridview中每页显示10条记录,用户必须单击下一步按钮才能显示接下来... 查看详情
关于winform下datagridview中实现checkbox全选反选同步列表项的处理
...来感恩对我提供帮助的人们。正题如下一、关于Winform下DataGridView中实现checkbox全选反选、同步列表项的处理 1.che 查看详情
winform中datagridview控件添加行标题
有很多种方法。 1、可以在DataGridView控件中的RowStateChanged事件改变行标题单元格的值(Row.HeaderCell.Value)1///<summary>2///行状态更改时发生3///</summary>4///<paramname="sender"></param>5///<paramname="e"& 查看详情
winform控件之combobox,datagridview(代码片段)
1.代码结构截图2.核心代码usingSystem;usingSystem.Data;usingSystem.Drawing;usingSystem.Windows.Forms;namespaceWinFormComboBoxDemos///<summary>///WinForm程序:ComboBox和DataGridView使用方法///LDH@2018-3-6///</su 查看详情
winform窗体——datagridview控件及通过此控件中实现增删改查
DataGridView:显示数据表,通过此控件中可以实现连接数据库,实现数据的增删改查一、后台数据绑定: List<xxx>list=newList<xxx>(); dataGridView1.DataSource=list; &nbs 查看详情
c#winform显示选中的行是第几行,datagridview控件
1UI 2keyCode1privatevoidbutton3_Click_1(objectsender,EventArgse)2{3//不加1的话,选取第一行的时候提示0,第二行提示1,所以我加了一个1,方便看4//为什么要加索引0,因为我有可能选取多行,这个时候该如何显示我选取的是第几行呢... 查看详情
c#winform的datagridview问题
...中添加一个ContexMenuStrip1控件,给该控件添加删除项,把datagridview的ContexMenuStrip属性项绑定为你所添加的ContexMenuStrip1控件,然后就是你自己编写程序来操作删除具体的东西了 查看详情
winform自定义分页控件及datagridview数据绑定
分页效果如上图所示,用到的控件均为基本控件,其方法如下右击项目-添加-新建项选择用户控件然后在用户控件中拖入所需要的Label,Button,Text用户控件全部代码: usingSystem;usingSystem.Collections.Generic;usingSystem.Componen... 查看详情
添加列的自定义 WinForms DataGridView 问题
】添加列的自定义WinFormsDataGridView问题【英文标题】:CustomWinFormsDataGridViewissueswithaddingcolumns【发布时间】:2010-11-2915:22:18【问题描述】:我正在创建一个继承内置DataGridView控件的自定义winformsdatagridview控件。我的Columns属性有问题... 查看详情
c#winform关于listview控件绑定datatable
...程中实现绑定控件的column的属性,再进行item的绑定。与DataGridView不同的是,不能直接使用DataSourse绑定,再者,绑定第一个Items的时候一定要实例化一个Item进行单独绑定,因为第一个Item与后面的不用即Item与SubItem的区别,下面的... 查看详情