DataGridView是winfrom一个很强大的控件,但是有些时候这个控件外观需要自己动手重绘。接下是个人在项目中遇到到一些问题。
1.不管是给单元格添加序号也好,还是给指定单元格加文本,其实都是重绘某个单元格。
我个人比较喜欢在表单绘画的时候触发他自己的机制去重绘。RowPostPaint。
直接这个事件里面开始代码。
private void dgv1_RowPostPaint(object sender, DataGridViewRowPostPaintEventArgs e)///dgv1_RowPostPaint事件的名称
{
StringFormat StringFormat = new StringFormat() { LineAlignment = StringAlignment.Center, Alignment = StringAlignment.Center };///这里设置居中样式
System.Drawing.Rectangle rectangle = new System.Drawing.Rectangle(e.RowBounds.Location.X,
e.RowBounds.Location.Y, AGING_DETAIL.RowHeadersWidth -4, e.RowBounds.Height);//这里是要获取表头的单元格起始位置,高度宽度,为重绘序列准备。里面的参数下面有图解释
TextRenderer.DrawText(e.Graphics, (e.RowIndex + 1).ToString(),
AGING_DETAIL.RowHeadersDefaultCellStyle.Font, rectangle, AGING_DETAIL.RowHeadersDefaultCellStyle.ForeColor,
TextFormatFlags.VerticalCenter | TextFormatFlags.Right);///这里是重新绘制行级的某个单元
Y = this.AGING_DETAIL.GetCellDisplayRectangle(4, e.RowIndex, false).Y;///这里是获取当前行的第4列Y坐标
X = this.AGING_DETAIL.GetCellDisplayRectangle(4, e.RowIndex, false).X;///这里是获取当前行的第4列X坐标
W = this.AGING_DETAIL.GetCellDisplayRectangle(4, e.RowIndex, false).Width;///这里是获取当前行的宽度
H = this.AGING_DETAIL.GetCellDisplayRectangle(4, e.RowIndex, false).Height;///这里是获取当前行的高度度
System.Drawing.Rectangle rectangle1 = new System.Drawing.Rectangle(X,Y,
W, H);
e.Graphics.DrawString(AGING_DETAIL.Rows[e.RowIndex].Cells[4].Value.ToString()+"%",
AGING_DETAIL.RowHeadersDefaultCellStyle.Font, new SolidBrush(AGING_DETAIL.RowHeadersDefaultCellStyle.ForeColor), rectangle1, StringFormat);///这里是为我们刚刚获取的单元范围内绘制文本,上面的序列也可以用这个方法。个人比较喜欢这个。
}
///一下对上面一下参数图解一下
~~~
~~~~
----------------------------------------------------------------------------------小尾巴分割------------------------------------------------------------------------
菜鸟的记录也是进步~如果对你有所帮助,那就小小的赞一下吧。-----来自没有代码的程序员小萝卜