`
xuxujiang0
  • 浏览: 18857 次
  • 性别: Icon_minigender_1
  • 来自: 中山
社区版块
存档分类
最新评论

DataGirdView重写部分界面源码

    博客分类:
  • c#
阅读更多

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多表头源码

    通过深入研究这份源码,开发者可以学习到如何灵活地定制`DataGridView`,以满足复杂的业务需求,并提升用户界面的用户体验。同时,对于.NET开发人员来说,这样的实践也有助于提高他们的控件定制能力和问题解决技巧。

    带颜色选择下拉框的DataGridView(Demo+源码)

    `DataGridViewTextBoxColumn`是`DataGridView`中默认的文本列类型,但我们可以通过继承`DataGridViewTextBoxColumn`并重写其行为来创建自己的颜色选择列。这通常涉及以下步骤: 1. 创建一个新的类,继承自`...

    DataGridView 超级炫酷的界面开发

    在Windows Forms应用开发中,`DataGridView`控件是不可或缺的一部分,它用于展示表格数据,并提供了丰富的功能和定制性。在这个“DataGridView 超级炫酷的界面开发”项目中,我们将探讨如何利用`DataGridView`创建出...

    DataGridView功能扩展及其它控件源码

    这个压缩包"DataGridView功能扩展及其它控件源码"包含了一些高级特性的实现,旨在增强标准的DataGridView控件的功能,同时也涉及到MonthCalendar和GridCalendar这两个日历控件的扩展。让我们详细探讨这些扩展功能...

    DataGridView单元格合并和DataGridView二维表头

    2. **嵌套`DataGridView`**:在一个`DataGridView`内部嵌套另一个`DataGridView`,分别作为主表和子表,子表的表头可以视为二维的一部分。 3. **自定义控件**:创建一个自定义控件,包含多个`Label`或`TextBox`模拟...

    c#DataGridView数据绑定示例 格式化单元格的内容源码

    本示例主要关注如何将数据绑定到`DataGridView`并格式化单元格内容,这对于创建用户友好的界面和提升数据可视化效果至关重要。 首先,数据绑定是将数据源(如数据库、数组或集合)与`DataGridView`关联的过程,使得...

    c#vb.net中DataGridView透明表格半透明支持背景图

    在一些高级的用户界面设计中,可能会有需求将`DataGridView`设置为半透明或透明,同时支持自定义背景图片,以提供更加美观且个性化的用户体验。以下就是关于如何实现这一功能的详细解释。 首先,我们要理解透明度的...

    DataGridView合并单元格(纵向合并及横向合并)

    最后,关于源码,"DataGridView合并单元格(纵向合并及横向合并).txt"文件很可能是包含了实现上述功能的C#代码示例。你可以打开这个文本文件查看具体的实现细节,以便更好地理解和应用到自己的项目中。 总之,掌握...

    DataGridVIew 合并列头

    但在某些场景下,如展示层次结构数据或者为了简化用户界面,我们需要将多个列头合并成一个大的标题。列头合并通常是通过设置`DataGridViewColumn.HeaderText`属性来实现的,但这个方法只适用于同一级别的合并,无法...

    多表头DataGridView

    实现多表头的关键在于重写`OnPaint`事件处理程序,通过对绘图操作的精确控制,我们可以创建出复杂的头部结构。这包括绘制额外的行和列,以及处理用户交互,如鼠标悬停、点击等效果。在设计时,还需要考虑兼容性和可...

    vb表格框控件源码 vb表格框控件源码

    源码通常包含控件的初始化、数据填充、事件处理和样式设置等部分。例如,初始化可能涉及设置控件的行数、列数、边框样式等;数据填充可能通过循环将数据集中的记录映射到表格的行和列;事件处理可能包括点击、编辑...

    DataGridView分页控件

    标签中的“源码”指的是`PagingDataGridView`可能提供了源代码供开发者参考和学习,而“工具”则暗示该控件可能作为开发工具的一部分,帮助程序员快速构建带有分页功能的界面。 在提供的压缩包`PagingDataGridView`...

    多层表头DataGridView示例 mDataGridView

    1. **自定义DataGridView列类型**:可能需要创建一个新的列类型,继承自DataGridViewTextBoxColumn或DataGridViewColumn,并重写相关的绘制方法,以支持多级标题的绘制。 2. **数据绑定**:正确地绑定数据源到...

    复合表头,复合行,datagridview

    本主题将深入探讨“复合表头”和“复合行”这两个关键概念,并结合源码分析如何在`DataGridView`中实现它们。 首先,让我们了解什么是“复合表头”。在标准的`DataGridView`中,表头通常只有一个层次,即列标题。而...

    DataGridView单元格合并和二维表头

    源码部分可能包含示例代码,展示了如何在C#中实现上述功能。这些代码可能包括创建`DataGridView`实例,设置其属性,添加列,合并单元格,以及绘制二维表头的相关逻辑。通过学习和分析这些代码,开发者能够快速掌握在...

    c#表格套打程序源码

    在Winform应用中,用户界面(UI)通常由控件如DataGridView展示数据,而套打程序则需要处理这些控件的数据,并将其转换为打印模板。 这个程序的描述中提到它是“简单实用”的,这意味着它可能没有过于复杂的特性,...

    C#控件之合并单元格源码.rar

    1. **自定义绘制**: 要实现单元格的合并,我们需要重写DataGridView的`OnPaint`方法,进行自定义绘制。这是因为默认的绘制机制不支持单元格合并。在自定义绘制过程中,我们需要计算合并后的单元格范围,并绘制相应的...

    Pro.NET2.0 Windows Forms and Custom Controls in C# (Dec 2005)_源码

    在源码中,你可能会发现如何定义控件的外观和行为,例如重写OnPaint方法进行自定义绘制,或者添加新的属性和方法来扩展功能。 创建自定义控件可能涉及到以下几个关键步骤: 1. **定义控件类**:继承自Control或其他...

    C#原生报表操作--设置每页打印30行实例源码

    5. **源码分析**:在提供的源码中,可能会包含以下部分: - 数据获取和处理:这部分代码负责从数据库或其他数据源获取数据,并进行分页处理。 - 报表布局设计:可能包含创建表格控件,设置样式,以及计算行高和...

    C#打印实例--打印商品出库单实例源码

    1. **创建模板**:开发者可能使用WPF或WinForms中的控件(如Label、TextBox、DataGridView等)来构建出库单的界面,这些控件可以动态填充数据,模拟出库单的样式。界面设计完成后,可以将其保存为一个模板,方便后期...

Global site tag (gtag.js) - Google Analytics