码迷,mamicode.com
首页 > Windows程序 > 详细

DataGridView单元格美化

时间:2015-07-08 18:02:57      阅读:184      评论:0      收藏:0      [点我收藏+]

标签:

技术分享

 
 
 
#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   

DataGridView单元格美化

标签:

原文地址:http://www.cnblogs.com/xxaxx/p/4630864.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!