using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Winner.CU.CheckAccounts.DataAccess;
using Winner.CU.CheckAccounts.Facade;
using System.Drawing.Drawing2D;
using System.Drawing;
namespace CheckAccounts
{
public class testDataGirdView:System.Windows.Forms.DataGridView
{
/// <summary>
/// 重绘Column、Row
/// </summary>
/// <param name="e"></param>
protected override void OnCellPainting(DataGridViewCellPaintingEventArgs e)
{
//如果是Column
if (e.RowIndex == -1)
{
drawColumnAndRow(e);
e.Handled = true;
//如果是Rowheader
}
else if (e.ColumnIndex < 0 && e.RowIndex >= 0)
{
drawColumnAndRow(e);
e.Handled = true;
}
}
/// <summary>
/// Column和RowHeader绘制
/// </summary>
/// <param name="e"></param>
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);
}
}
/// <summary>
/// Row重绘前处理
/// </summary>
/// <param name="e"></param>
protected override void OnRowPrePaint(DataGridViewRowPrePaintEventArgs e)
{
base.OnRowPrePaint(e);
//是否是选中状态
if ((e.State & DataGridViewElementStates.Selected) ==
DataGridViewElementStates.Selected)
{
// 计算选中区域Size
int width = this.Columns.GetColumnsWidth(DataGridViewElementStates.Visible) + RowHeadersWidth; //+ _RowHeadWidth;
Rectangle rowBounds = new Rectangle(
0, e.RowBounds.Top, width,
e.RowBounds.Height);
// 绘制选中背景色
using (LinearGradientBrush backbrush =
new LinearGradientBrush(rowBounds,
Color.GreenYellow,
e.InheritedRowStyle.ForeColor, 90.0f))
{
e.Graphics.FillRectangle(backbrush, rowBounds);
e.PaintCellsContent(rowBounds);
e.Handled = true;
}
}
}
/// <summary>
/// Row重绘后处理
/// </summary>
/// <param name="e"></param>
protected override void OnRowPostPaint(DataGridViewRowPostPaintEventArgs e)
{
base.OnRowPostPaint(e);
int width = this.Columns.GetColumnsWidth(DataGridViewElementStates.Visible) + RowHeadersWidth;// + _RowHeadWidth;
Rectangle rowBounds = new Rectangle(
0, e.RowBounds.Top, width, e.RowBounds.Height);
if (this.CurrentCellAddress.Y == e.RowIndex)
{
//设置选中边框
e.DrawFocus(rowBounds, true);
}
}
}
}
分享到:
相关推荐
通过深入研究这份源码,开发者可以学习到如何灵活地定制`DataGridView`,以满足复杂的业务需求,并提升用户界面的用户体验。同时,对于.NET开发人员来说,这样的实践也有助于提高他们的控件定制能力和问题解决技巧。
`DataGridViewTextBoxColumn`是`DataGridView`中默认的文本列类型,但我们可以通过继承`DataGridViewTextBoxColumn`并重写其行为来创建自己的颜色选择列。这通常涉及以下步骤: 1. 创建一个新的类,继承自`...
在Windows Forms应用开发中,`DataGridView`控件是不可或缺的一部分,它用于展示表格数据,并提供了丰富的功能和定制性。在这个“DataGridView 超级炫酷的界面开发”项目中,我们将探讨如何利用`DataGridView`创建出...
这个压缩包"DataGridView功能扩展及其它控件源码"包含了一些高级特性的实现,旨在增强标准的DataGridView控件的功能,同时也涉及到MonthCalendar和GridCalendar这两个日历控件的扩展。让我们详细探讨这些扩展功能...
2. **嵌套`DataGridView`**:在一个`DataGridView`内部嵌套另一个`DataGridView`,分别作为主表和子表,子表的表头可以视为二维的一部分。 3. **自定义控件**:创建一个自定义控件,包含多个`Label`或`TextBox`模拟...
本示例主要关注如何将数据绑定到`DataGridView`并格式化单元格内容,这对于创建用户友好的界面和提升数据可视化效果至关重要。 首先,数据绑定是将数据源(如数据库、数组或集合)与`DataGridView`关联的过程,使得...
在一些高级的用户界面设计中,可能会有需求将`DataGridView`设置为半透明或透明,同时支持自定义背景图片,以提供更加美观且个性化的用户体验。以下就是关于如何实现这一功能的详细解释。 首先,我们要理解透明度的...
最后,关于源码,"DataGridView合并单元格(纵向合并及横向合并).txt"文件很可能是包含了实现上述功能的C#代码示例。你可以打开这个文本文件查看具体的实现细节,以便更好地理解和应用到自己的项目中。 总之,掌握...
但在某些场景下,如展示层次结构数据或者为了简化用户界面,我们需要将多个列头合并成一个大的标题。列头合并通常是通过设置`DataGridViewColumn.HeaderText`属性来实现的,但这个方法只适用于同一级别的合并,无法...
实现多表头的关键在于重写`OnPaint`事件处理程序,通过对绘图操作的精确控制,我们可以创建出复杂的头部结构。这包括绘制额外的行和列,以及处理用户交互,如鼠标悬停、点击等效果。在设计时,还需要考虑兼容性和可...
源码通常包含控件的初始化、数据填充、事件处理和样式设置等部分。例如,初始化可能涉及设置控件的行数、列数、边框样式等;数据填充可能通过循环将数据集中的记录映射到表格的行和列;事件处理可能包括点击、编辑...
标签中的“源码”指的是`PagingDataGridView`可能提供了源代码供开发者参考和学习,而“工具”则暗示该控件可能作为开发工具的一部分,帮助程序员快速构建带有分页功能的界面。 在提供的压缩包`PagingDataGridView`...
1. **自定义DataGridView列类型**:可能需要创建一个新的列类型,继承自DataGridViewTextBoxColumn或DataGridViewColumn,并重写相关的绘制方法,以支持多级标题的绘制。 2. **数据绑定**:正确地绑定数据源到...
本主题将深入探讨“复合表头”和“复合行”这两个关键概念,并结合源码分析如何在`DataGridView`中实现它们。 首先,让我们了解什么是“复合表头”。在标准的`DataGridView`中,表头通常只有一个层次,即列标题。而...
源码部分可能包含示例代码,展示了如何在C#中实现上述功能。这些代码可能包括创建`DataGridView`实例,设置其属性,添加列,合并单元格,以及绘制二维表头的相关逻辑。通过学习和分析这些代码,开发者能够快速掌握在...
在Winform应用中,用户界面(UI)通常由控件如DataGridView展示数据,而套打程序则需要处理这些控件的数据,并将其转换为打印模板。 这个程序的描述中提到它是“简单实用”的,这意味着它可能没有过于复杂的特性,...
1. **自定义绘制**: 要实现单元格的合并,我们需要重写DataGridView的`OnPaint`方法,进行自定义绘制。这是因为默认的绘制机制不支持单元格合并。在自定义绘制过程中,我们需要计算合并后的单元格范围,并绘制相应的...
在源码中,你可能会发现如何定义控件的外观和行为,例如重写OnPaint方法进行自定义绘制,或者添加新的属性和方法来扩展功能。 创建自定义控件可能涉及到以下几个关键步骤: 1. **定义控件类**:继承自Control或其他...
5. **源码分析**:在提供的源码中,可能会包含以下部分: - 数据获取和处理:这部分代码负责从数据库或其他数据源获取数据,并进行分页处理。 - 报表布局设计:可能包含创建表格控件,设置样式,以及计算行高和...
1. **创建模板**:开发者可能使用WPF或WinForms中的控件(如Label、TextBox、DataGridView等)来构建出库单的界面,这些控件可以动态填充数据,模拟出库单的样式。界面设计完成后,可以将其保存为一个模板,方便后期...