
#region 重绘Column、Row
int _RowHeadWidth = 41;
///
/// 重绘Column、Row
///
///
///
private void gdvPersonInfo_CellPainting(object sender, DataGridViewCellPaintingEventArgs e)
{
//如果是Column
if (e.RowIndex == -1)
{
drawColumnAndRow(e);
e.Handled = true;
//如果是Rowheader
}
else if (e.ColumnIndex < 0 && e.RowIndex >= 0)
{
drawColumnAndRow(e);
_RowHeadWidth = e.CellBounds.Width;
e.Handled = true;
}
}
///
/// Column和RowHeader绘制
///
///
void drawColumnAndRow(DataGridViewCellPaintingEventArgs e)
{
// 绘制背景色
using (LinearGradientBrush backbrush =
new LinearGradientBrush(e.CellBounds,
ProfessionalColors.MenuItemPressedGradientBegin,
ProfessionalColors.MenuItemPressedGradientMiddle
, LinearGradientMode.Vertical))
{
Rectangle border = e.CellBounds;
border.Width -= 1;
//填充绘制效果
e.Graphics.FillRectangle(backbrush, border);
//绘制Column、Row的Text信息
e.PaintContent(e.CellBounds); // 参数的意义?
//绘制边框
ControlPaint.DrawBorder3D(e.Graphics, e.CellBounds, Border3DStyle.Etched);
}
}
#endregion
#region 重绘选中状态
#region Row重绘前处理
///
/// Row重绘前处理,绘制行样式
///
///
///
private void gdvPersonInfo_RowPrePaint(object sender, DataGridViewRowPrePaintEventArgs e)
{
//是否是选中状态
if ((e.State & DataGridViewElementStates.Selected) ==
DataGridViewElementStates.Selected)
{
// 计算选中区域Size
int width = this.gdvPersonInfo.Columns.GetColumnsWidth(DataGridViewElementStates.Visible) + _RowHeadWidth;
Rectangle rowBounds = new Rectangle(
0, e.RowBounds.Top, width,
e.RowBounds.Height);
// 绘制选中背景色
using (LinearGradientBrush backbrush =
new LinearGradientBrush(rowBounds,
Color.SteelBlue,
e.InheritedRowStyle.ForeColor, 90.0f))
{
e.Graphics.FillRectangle(backbrush, rowBounds);
e.PaintCellsContent(rowBounds);
e.Handled = true; //告诉系统,已经自己重绘过了,该次绘制任务到此结束
}
}
}
#endregion
#region Row重绘后处理
///
/// Row重绘后处理,目前显示效果不大
///
///
private void gdvPersonInfo_RowPostPaint(object sender, DataGridViewRowPostPaintEventArgs e)
{
int width = this.gdvPersonInfo.Columns.GetColumnsWidth(DataGridViewElementStates.Visible) + _RowHeadWidth;
Rectangle rowBounds = new Rectangle(
0, e.RowBounds.Top, width, e.RowBounds.Height);
if (this.gdvPersonInfo.CurrentCellAddress.Y == e.RowIndex)
{
//设置选中边框,显示为虚线的聚焦框
e.DrawFocus(rowBounds, true);
}
}
#endregion
#region Row刷新
///
/// 宽度改变后处理,暂时没出现效果
///
private void gdvPersonInfo_ColumnWidthChanged(object sender, DataGridViewColumnEventArgs e)
{
if (this.gdvPersonInfo.CurrentRow != null)
this.gdvPersonInfo.InvalidateRow(this.gdvPersonInfo.CurrentRow.Index);
}
///
/// 用户或代码滚动工作区时发生,暂没看见效果
///
protected override void OnScroll(ScrollEventArgs e)
{
base.OnScroll(e);
if (this.gdvPersonInfo.CurrentRow != null)
this.gdvPersonInfo.InvalidateRow(this.gdvPersonInfo.CurrentRow.Index);
}
#endregion
#endregion
- winform中dataGridView单元格根据值设置新值,彻底解决绑定后数据类型转换的困难
// winform中dataGridView单元格在数据绑定后,数据类型更改困难,只能迂回实现.有时候需要将数字变换为不同的文字描述,就会出现int32到string类型转换的异常,借助CellFo ...
- DataGridView单元格合并
本文章转载:http://www.cnblogs.com/xiaofengfeng/p/3382094.html 图: 代码就是如此简单 文件下载:DataGridView单元格合并源码 也可以参考: ...
- DataGridView单元格显示GIF图片
本文转载:http://home.cnblogs.com/group/topic/40730.html DataGridView单元格显示GIF图片 gifanimationindatagrid.ra ...
- Winfrom设置DataGridView单元格获得焦点(DataGridView - CurrentCell)
设置DataGridView单元格获得焦点 this.dgv_prescription.BeginEdit(true);
- DataGridView 单元格自动填充
在DataGridView单元格中,当输入指定字符时,自动完成填充. 通过 TextBox实现 AutoCompleteMode AutoCompleteMode.Suggest: AutoCompl ...
- Winform Datagridview 单元格html格式化支持富文本
Winform Datagridview 单元格html格式化支持富文本 示例: 源码:https://github.com/OceanAirdrop/DataGridViewHTMLCell 参考: ...
- 设置DataGridView单元格的文本对齐方式
实现效果: 知识运用: DataGridViewCellStyle类的Alignment属性 //获取或设置DataGridView单元格内的单元格内容的位置 public DataGridV ...
- 【Winform-自定义控件】DataGridView 单元格合并和二维表头
DataGridView单元格合并和二维表头应用: //DataGridView绑定数据 DataTable dt = new DataTable(); dt.Columns.Add("); ...
- WinForm笔记1:TextBox编辑时和DataGridView 单元格编辑时 的事件及其顺序
TextBox 编辑框 When you change the focus by using the mouse or by calling the Focus method, focus event ...
随机推荐
- session生命周期
session生命周期 原文链接:http://blog.sina.com.cn/s/blog_72c8c1150100qpgl.html 文中黄色字体为我的标记修改或添加 Session保存在服务器 ...
- 抽象工厂模式(Abstract Factory)
GOF:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类. 类图:
- gets(),fgets()的作用机制探究
gets(),fgets() scanf("%d",&a)若接受形如 2 这样的输入后,缓冲区内会留一个\n,此后若调用gets等函数时会读出这个换行出现错误,需注意 fg ...
- Sublime Text3 常用快捷键
1. 更改变量名的几种方法 a.选中变量,ctrl+d 一个个选择 b.选中变量,alt+F3 2.查找打开过的文件:Ctrl+P,然后输入最近的文件名就可以即时预览到文件内容. 3.ctrl+r ...
- js检测浏览器是否支持某属性
以检测浏览器是否支持 input 标签的 required 属性为例: var isSupport = 'required' in document.createElement('input');
- The Python Tutorial
1. >>> print('C:\some\name') # here \n means newline! C:\some ame >>> print(r'C:\s ...
- JS之对象
每个对象的属性有两种,每种属性有4中特征描述符 1.数据属性 1.1 [[configurable]]:表示不能通过delete删除属性,不能修改属性的特性,不能将数据属性改为访问器属性,默认值fal ...
- iOS应用架构谈 开篇
iOS应用架构谈 view层的组织和调用方案 iOS应用架构谈 网络层设计方案 iOS应用架构谈 动态部署方案 iOS应用架构谈 本地持久化方案 缘由 之前安居客iOS app的第二版架构大部分内容是 ...
- http-2.4.18 安装
编译最新的httpd 2.4.18 编译提示apr版本低于1.4 rpm repo源是1.39的 因此编译apr 下载 apr apr-util apr-iconv [root@ansibl ...
- curl常用选项详解
curl常用选项详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 又是下班的时间了,让我们一起来学习一下今天的Linux命令吧~我一半只把自己常用的参数列出来,其他的有但是我们几 ...