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#