VS2005下DataGridView 的多种样式列控件

翻译|其它|编辑:郝浩|2007-09-17 09:38:48.000|阅读 2178 次

概述:

# 界面/图表报表/文档/IDE等千款热门软控件火热销售中 >>

VS2005已经发布好久了,但对  DataGridView  的使用,在网上的资料还比较少,DataGridView  无论是美观与功能方面都是  DataGrid  所不能比的,应该说  DataGridView  不是  DataGrid  的升级,因为  DataGridView  使用了一套全新的构建方式,引入了DataGridViewCell ,DataGridViewColumn,DataGridViewRow,,新的概念,也使编程更容易了,它提供了  DataGridViewTextBoxColumn,DataGridViewImageColumn,DataGridLinkColumn,DataGridViewComboBoxColumn,DataGrid ViewButtonColumn,DataGridViewCheckBoxColumn,等样式列
但我们常用的远不只这些样式列,所以我不想把所有的样式列都给大家做出来,我只是想抛砖引玉通过我自己做的四个样式列来让大家掌握自定义  DataGridView  样式列的方法.由于时间仓促功能不是很完善,望大家见谅,好了大家先看看4个控件的效果.

一:DataGridViewMaskedTextBoxColumn(正则表达式样式列)

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Drawing;

using System.Data;

using System.Text;

using System.Windows.Forms;

using System.Drawing.Design;

 

namespace WindowsApplication23

{

    //Cell编辑类,实现IDataGridViewEditingControl接口,可参照ComboBoxEditingControl的写法

    public class DataGridViewMaskedTextBoxEditingControl:MaskedTextBox,IDataGridViewEditingControl

    {

        protected int rowIndex;

        protected DataGridView dataGridView;

        protected bool valueChanged = false;

 

        public DataGridViewMaskedTextBoxEditingControl()

        {

            base.TabStop = false;

        }

        //重写基类(MakedTextBox)OnTextChanged方法

        protected override void OnTextChanged(EventArgs e)

        {

            base.OnTextChanged(e);

            NotifyDataGridViewOfValueChange();

        }

        //  text值发生变化时,通知DataGridView

        private void NotifyDataGridViewOfValueChange()

        {

            valueChanged = true;

            dataGridView.NotifyCurrentCellDirty(true);

        }

        /**//// <summary>

        /// 设置对齐方式

        /// </summary>

        /// <param name="align"></param>

        /// <returns></returns>

        private static HorizontalAlignment translateAlignment(DataGridViewContentAlignment align)

        {

            switch (align)

            {

                case DataGridViewContentAlignment.TopLeft:

                case DataGridViewContentAlignment.MiddleLeft:

                case DataGridViewContentAlignment.BottomLeft:

                    return HorizontalAlignment.Left;

 

                case DataGridViewContentAlignment.TopCenter:

                case DataGridViewContentAlignment.MiddleCenter:

                case DataGridViewContentAlignment.BottomCenter:

                    return HorizontalAlignment.Center;

 

                case DataGridViewContentAlignment.TopRight:

                case DataGridViewContentAlignment.MiddleRight:

                case DataGridViewContentAlignment.BottomRight:

                    return HorizontalAlignment.Right;

            }

 

             return HorizontalAlignment.Left;

        }

 

        /**//// <summary>

        /// Cell被编辑的时候光标显示

        /// </summary>

        public Cursor EditingPanelCursor

        {

            get

            {

                return Cursors.IBeam;

            }

        }

        /**//// <summary>

        /// 获取或设置所在的DataGridView

        /// </summary>

        public DataGridView EditingControlDataGridView

        {

            get

            {

                return dataGridView;

            }

 

            set

            {

                dataGridView = value;

            }

        }

 

        /**//// <summary>

        /// 获取或设置格式化后的值

        /// </summary>

        public object EditingControlFormattedValue

        {

            set

            {

                Text = value.ToString();

                NotifyDataGridViewOfValueChange();

            }

            get

            {

                return this.Text;

            }

 

        }

        /**//// <summary>

        /// 获取控件的Text

        /// </summary>

        /// <param name="context">错误上下文</param>

        /// <returns></returns>

        public virtual object GetEditingControlFormattedValue(DataGridViewDataErrorContexts context)

        {

            return Text;

        }

 

        /**//// <summary>

        /// 编辑键盘

        /// </summary>

        /// <param name="keyData"></param>

        /// <param name="dataGridViewWantsInputKey"></param>

        /// <returns></returns>

        public bool EditingControlWantsInputKey(Keys keyData, bool dataGridViewWantsInputKey)

        {

            switch (keyData & Keys.KeyCode)

            {

                case Keys.Right:

                    if (!(this.SelectionLength == 0

                          && this.SelectionStart == this.ToString().Length))

                    {

                        return true;

                    }

                    break;

 

                case Keys.Left:

                    if (!(this.SelectionLength == 0

                          && this.SelectionStart == 0))

                    {

                        return true;

                    }

                    break;

 

                case Keys.Home:

                case Keys.End:

                    if (this.SelectionLength != this.ToString().Length)

                    {

                        return true;

                    }

                    break;

 

                case Keys.Prior:

                case Keys.Next:

                    if (this.valueChanged)

                    {

                        return true;

                    }

                    break;

 

                case Keys.Delete:

                    if (this.SelectionLength > 0 || this.SelectionStart < this.ToString().Length)

                    {

                        return true;

                    }

                    break;

            }

            return !dataGridViewWantsInputKey;

        }

       

        public void PrepareEditingControlForEdit(bool selectAll)

        {

            if (selectAll)

            {

                SelectAll();

            }

            else

            {

                this.SelectionStart = this.ToString().Length;

            }

        }

        public virtual bool RepositionEditingControlOnValueChange

        {

            get

            {

                return false;

            }

        }

        /**//// <summary>

        /// 控件所在行

        /// </summary>

        public int EditingControlRowIndex

        {

            get

            {

                return this.rowIndex;

            }

 

            set

            {

                this.rowIndex = value;

            }

        }

        /**//// <summary>

        /// 设置样式

        /// </summary>

        /// <param name="dataGridViewCellStyle"></param>

        public void ApplyCellStyleToEditingControl(DataGridViewCellStyle dataGridViewCellStyle)

        {

            this.Font = dataGridViewCellStyle.Font;

            this.ForeColor = dataGridViewCellStyle.ForeColor;

            this.BackColor = dataGridViewCellStyle.BackColor;

            this.TextAlign = translateAlignment(dataGridViewCellStyle.Alignment);

        }

 

 

        /**//// <summary>

        /// 是否值发生了变化

        /// </summary>

        public bool EditingControlValueChanged

        {

            get

            {

                return valueChanged;

            }

 

            set

            {

                this.valueChanged = value;

            }

        }

    }

}

()DataGridViewFormat(可以获取格式的列,如N2 ,1234,11)

 

()DataGridViewTreeViewColumn(下拉列表树控件 )

()DataGridViewDateTimeColumn(日期选择列控件)


标签:

本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@evget.com

文章转载自:csdn

为你推荐

  • 推荐视频
  • 推荐活动
  • 推荐产品
  • 推荐文章
  • 慧都慧问
扫码咨询


添加微信 立即咨询

电话咨询

客服热线
023-68661681

TOP