DataGridView 实时更新表格数据

悲伤 不想说话

 

using System;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Windows.Forms;

    public partial class FDataGridView : Form  // 在窗体上拖一个DataGridView上去
    {
        // 1) 实现System.ComponentModel.INotifyPropertyChanged接口
        class Character : INotifyPropertyChanged
        {
            string _name;
            [DisplayName("你的名字")]  // 这是显示的列名称哦
            public string Name
            {
                get { return _name; }
                set
                {
                    if (_name != value)
                    {
                        _name = value;
                        NotifyPropertyChanged("Name");
                    }
                }
            }

            // 2) 在属性改变时引发事件
            int _age;
            [DisplayName("他的年纪")]
            public int Age
            {
                get { return _age; }
                set
                {
                    if (_age != value)
                    {
                        _age = value;
                        NotifyPropertyChanged("Age");
                    }
                }
            }

            PropertyChangedEventHandler _propertyChanged;
            public event PropertyChangedEventHandler PropertyChanged
            {
                add { _propertyChanged += value; }
                remove { _propertyChanged -= value; }
            }

            private void NotifyPropertyChanged(string property_name)
            {
                _propertyChanged?.Invoke(this, new PropertyChangedEventArgs(property_name));
            }
        }  /* end of class Character */

        DataTable _dtSource;   // 方式一

        BindingList<Character> _bdList;  // 方式二
        BindingSource _bdSource;

        public FDataGridView()
        {
            InitializeComponent();

            FormClosing += FDataGridView_FormClosing;

            Menu = new MainMenu();
            MenuItem operation = new MenuItem("Operation");

            Menu.MenuItems.Add(operation);

            MenuItem menu1 = new MenuItem("DataTable");
            MenuItem menu11 = new MenuItem("Bind DataSource", menu11_Click);
            MenuItem menu12 = new MenuItem("Change Data", menu12_Click);
            MenuItem menu13 = new MenuItem("Create Data", menu13_Click);
            menu1.MenuItems.Add(menu11);
            menu1.MenuItems.Add(menu12);
            menu1.MenuItems.Add(menu13);

            MenuItem menu2 = new MenuItem("BindingSource");
            MenuItem menu21 = new MenuItem("Bind DataSource", menu21_Click);
            MenuItem menu22 = new MenuItem("Change Data", menu22_Click);
            MenuItem menu23 = new MenuItem("Create Data", menu23_Click);
            menu2.MenuItems.Add(menu21);
            menu2.MenuItems.Add(menu22);
            menu2.MenuItems.Add(menu23);

            operation.MenuItems.Add(menu1);
            operation.MenuItems.Add(menu2);

            Init();
        }

        private void FDataGridView_FormClosing(object sender, FormClosingEventArgs e)
        {
            _dtSource.Dispose();
            _bdList.Clear();
            _bdSource.Dispose();

            _dtSource = null;
            _bdList = null;
            _bdSource = null;
        }

        void Init()
        {
            _dtSource = new DataTable();
            _bdList = new BindingList<Character>();
            _bdSource = new BindingSource();
            _bdSource.DataSource = _bdList;  // 3) 绑定数据源,由BindingSoource组件处理细节

            _dtSource.Columns.Add(new DataColumn("Name"));
            _dtSource.Columns.Add(new DataColumn("Age"));

            DataRow dr;

            dr = _dtSource.NewRow();
            dr["Name"] = "1";
            dr["Age"] = "21";
            _dtSource.Rows.Add(dr);

            dr = _dtSource.NewRow();
            dr[0] = "2";
            dr[1] = "23";
            _dtSource.Rows.Add(dr);

            _dtSource.Rows.Add(3, 27);

            _bdList.Add(new Character() { Name = "1", Age = 21 });
            _bdList.Add(new Character() { Name = "2", Age = 23 });
            _bdList.Add(new Character() { Name = "3", Age = 27 });
        }

        #region menu click
        private void menu11_Click(object sender, EventArgs e)
        {
            dataGridView1.DataSource = null;
            dataGridView1.DataSource = _dtSource;
        }

        private void menu12_Click(object sender, EventArgs e)
        {
            _dtSource.Rows[0][1] = new Random().Next(0, 255);
        }

        private void menu13_Click(object sender, EventArgs e)
        {
            _dtSource.Rows.Add(Guid.NewGuid().ToString("N"), "en");
        }

        private void menu21_Click(object sendr, EventArgs e)
        {
            dataGridView1.DataSource = null;
            dataGridView1.DataSource = _bdSource;
        }

        private void menu22_Click(object sender, EventArgs e)
        {
            _bdList[0].Age = new Random().Next(0, 255);
        }

        private void menu23_Click(object sender, EventArgs e)
        {
            _bdList.Add(new Character() { Name = Guid.NewGuid().ToString("N") });
        }
        #endregion

        private void dataGridView1_DataError(object sender, DataGridViewDataErrorEventArgs e)
        {
            ;// dataGridView1.DataError += dataGridView1_DataError;  处理表格异常
        }

        private void dataGridView1_RowPostPaint(object sender, DataGridViewRowPostPaintEventArgs e)
        {
            if (e.RowIndex >= 0)
                e.Graphics.DrawString((e.RowIndex + 1).ToString(), e.InheritedRowStyle.Font, Brushes.Red, e.RowBounds.X + 15, e.RowBounds.Y + 10);
        }


    }  /* end of class */
View Code
posted @ 2018-10-16 00:02  不会吉他的程序员  阅读(8812)  评论(0编辑  收藏  举报