C#Winform自定义DataGridView 附源码

C#Winform自定义DataGridView 附源码

以下代码可实现这样的效果,不解释了:

这里写图片描述

    public partial class PersonalAccountForm : Form
    {
        private DataGridView dataGridView = new DataGridView();
        private VScrollBar scrollBar = new VScrollBar();

        public PersonalAccountForm()
        {
            InitializeComponent();

            //设置scrollBar属性
            scrollBar.Width = 5;
            scrollBar.Maximum = dataGridView.RowCount;
            scrollBar.SmallChange = 1;
            scrollBar.LargeChange = 1;
            scrollBar.Dock = DockStyle.Right;//设置scrollBar在父控件的右侧    
            scrollBar.Hide();

            //scrollBar事件
            scrollBar.MouseEnter += scrollBar_MouseEnter;
            scrollBar.MouseLeave += scrollBar_MouseLeave;
            scrollBar.Scroll += scrollBar_Scroll;

            //将scrollBar添加到dataGridView中
            dataGridView.Controls.Add(scrollBar);

            //设置dataGridView属性
            dataGridView.Dock = DockStyle.Fill;
            dataGridView.ScrollBars = ScrollBars.None;            
            dataGridView.SelectionMode = DataGridViewSelectionMode.CellSelect;//一次选择一个单元格
            dataGridView.MultiSelect = false;
            dataGridView.BackgroundColor =SystemColors.Control;
            dataGridView.BorderStyle = BorderStyle.None;
            dataGridView.GridColor = Color.LightGray;
            dataGridView.RowHeadersVisible = false;//这样左侧空白列就没有了
            dataGridView.AllowUserToResizeColumns = false;
            dataGridView.AllowUserToResizeRows = false;
            dataGridView.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.DisableResizing;//这样就禁止拖动标题行
            dataGridView.ColumnHeadersDefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;//这样标题行内容在垂直水平方向均居中
            dataGridView.DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;//这样所有单元格内容在垂直水平方向均居中
            dataGridView.ColumnHeadersHeight = 30;//设置列标题行高为30
            dataGridView.RowTemplate.Height = 23;//设置单元格行高为23
            dataGridView.ColumnHeadersDefaultCellStyle.Font = new Font("微软雅黑",9, FontStyle.Bold);
            dataGridView.RowsDefaultCellStyle.Font = new Font("微软雅黑",8.2F, FontStyle.Regular);
            dataGridView.ColumnHeadersBorderStyle = DataGridViewHeaderBorderStyle.Single;
            dataGridView.AllowUserToAddRows = false;//这样默认就没有额外的空行

            //dataGridView事件
            dataGridView.KeyUp += dataGridView_KeyUp;
            dataGridView.MouseWheel += dataGridView_MouseWheel;
            dataGridView.MouseEnter += dataGridView_MouseEnter;

            //dataGridView添加两列
            dataGridView.Columns.Add("column1", "项");
            dataGridView.Columns.Add("column2", "花费数目");

            //设置dataGridView各列的属性
            dataGridView.Columns[0].Width = panel1.Width / 4;
            dataGridView.Columns[1].Width = 3*panel1.Width / 4;
            dataGridView.Columns[0].SortMode = DataGridViewColumnSortMode.NotSortable;//这样就禁止第一列排序

            //设置第一行的属性
            dataGridView.Rows.Add("1");

            //将dataGridView添加到panel1中
            panel1.Controls.Add(dataGridView);

        }

        private void scrollBar_Scroll(object sender, ScrollEventArgs e)
        {
            if (e.NewValue>=rowNo)
            {
                return;
            }
            dataGridView.FirstDisplayedScrollingRowIndex = e.NewValue;            
        }

        /// <summary>
        /// 鼠标进入dataGridView区域事件
        /// </summary>
        private void dataGridView_MouseEnter(object sender, EventArgs e)
        {
            scrollBar.Show();

            timer.Interval = 1000;//设置时钟间隔为1s
            timer.Start();
            timer.Tick += timer_Tick;
        }

        /// <summary>
        /// 鼠标离开scrollBar事件
        /// </summary>
        private void scrollBar_MouseLeave(object sender, EventArgs e)
        {
            mouseEnterScrollBar = false;
            timer.Start();
        }

        private bool mouseEnterScrollBar = false;
        /// <summary>
        /// 鼠标进入scrollBar范围事件
        /// </summary>
        private void scrollBar_MouseEnter(object sender, EventArgs e)
        {
            mouseEnterScrollBar = true;
        }

        /// <summary>
        /// 声明一计时工具
        /// </summary>
        private Timer timer = new Timer();
        /// <summary>
        /// 鼠标滑轮滚动事件
        /// </summary>
        private void dataGridView_MouseWheel(object sender, MouseEventArgs e)
        {
            scrollBar.Show();
            timer.Interval = 1000;//设置时钟间隔为1s
            timer.Start();
            timer.Tick += timer_Tick;
        }

        //计数,指示当前是计时器开始后的第几秒
        int count = 0;
        /// <summary>
        /// Timer周期事件,每1s发生一次
        /// </summary>
        private void timer_Tick(object sender, EventArgs e)
        {
            count++;
            if (count>4)
            {
                timer.Stop();
                count = 0;
                if (!mouseEnterScrollBar)
                {
                    scrollBar.Hide();
                }
            }
        }

        int rowNo = 1;//设置最后一行的编号
        int scrollBarMaxinum = 0;//scrollBar的最大值
        /// <summary>
        /// dataGridView按键事件
        /// </summary>
        private void dataGridView_KeyUp(object sender, KeyEventArgs e)
        {
            rowNo++;
            if(e.KeyValue==13)
            {
                dataGridView.Rows.Add(rowNo.ToString());
                if (rowNo>15)
                {
                    scrollBarMaxinum++;
                    scrollBar.Maximum = scrollBarMaxinum;
                }
            }
        }

    }
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值