当前位置:编程学习 > C#/ASP.NET >>

winform DataGridView关于SelectionChanged事件的疑问

我在cs文件中声明一个datagridView,注册事件
(1)在Load事件中绑定数据并将控件添加到Form窗体中,运行后,selectionchanged事件运行了一次。
(2)在Load事件中先添加到窗体中并绑定数据,运行后,selectionChanged事件运行了三次。

不知道这是为什么?太诡异了吧

高人们求指点 --------------------编程问答-------------------- 每次load都+=了,你应该在创建时绑定一次就够了,绑定多次就会执行多次 --------------------编程问答--------------------  public partial class Form2 : Form
    {
        DataGridView gridView;
        public Form2()
        {
            InitializeComponent();
            gridView = new DataGridView();
            gridView.Dock = DockStyle.Fill;
            gridView.SelectionChanged += new EventHandler(gridView_SelectionChanged);
            this.Load += new EventHandler(Form2_Load);
        }

        void Form2_Load(object sender, EventArgs e)
        {
            gridView.AllowUserToAddRows = false;
            gridView.AllowUserToDeleteRows = false;
            gridView.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
            gridView.Columns.Add("StudentID", "学生编号");
            gridView.Columns.Add("StudentName", "学生姓名");
            gridView.Columns["StudentID"].DataPropertyName = "StudentID";
            gridView.Columns["StudentName"].DataPropertyName = "StudentName";
            gridView.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
            this.gridView.Name = "dataGridView1";
            this.gridView.ReadOnly = true;
            this.gridView.RowTemplate.Height = 23;

            BindData();

            this.Controls.Add(gridView);
           
        }

        void gridView_SelectionChanged(object sender, EventArgs e)
        {
            MessageBox.Show("选择");
        }

        private void BindData()
        {
            List<UserInfo> list = new List<UserInfo>();
            list.Add(new UserInfo() { StudentId = 1, StudentName = "aa" });
            list.Add(new UserInfo() { StudentId = 2, StudentName = "bb" });
            list.Add(new UserInfo() { StudentId = 3, StudentName = "aaa" });
            list.Add(new UserInfo() { StudentId = 4, StudentName = "bbb" });

            this.gridView.DataSource = list;
        }
    }


这是代码,我注册只有一次啊,把

 BindData();

 this.Controls.Add(gridView);

交换顺序,执行的次数就发生了变化 --------------------编程问答-------------------- 控件加载初始化的时候会执行,数据源改变的时候会执行,中间列行变化的时候也会执行,断电调试看看吧 --------------------编程问答-------------------- 控件加载初始化的时候会执行,数据源改变的时候会执行,中间列行变化的时候也会执行,断点调试看看吧 --------------------编程问答-------------------- 控件加载初始化的时候会执行,数据源改变的时候会执行,中间列行变化的时候也会执行,断点调试看看吧 --------------------编程问答-------------------- 这个我该怎么加断点调试呢
我只是运行了一个datasource的赋值操作,内部是怎么实现的没办法调试啊 --------------------编程问答-------------------- 这是什么原因呢,我的第一次初始化的时候只有1次,再次绑定的时候触发四次。太消耗性能了。 --------------------编程问答-------------------- “此事件会在选择或取消选择单元格(无论是以编程方式还是通过用户操作的方式)时发生”
这意味着无论是在代码运行还是用户操作阶段,只要所选的单元格发生更改就会触发SelectionChanged事件。
你的DataGridView在加载表格记录时会影响到单元格的默认选择位置发生改变(例如增加行增加列都有可能),
从而会多次触发SelectionChanged事件。
解决办法:在加载时设置开关控制。 --------------------编程问答-------------------- 加载了就已经执行了一次了,下面改变数据操作又一次,绑定数据又一次了,你为什么不直接绑定一次执行要绑定这么多次呢?
补充:.NET技术 ,  C#
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,