winform DataGridView关于SelectionChanged事件的疑问

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

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

高人们求指点
...全文
912 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
ltolll 2014-01-21
  • 打赏
  • 举报
回复
http://blog.csdn.net/ltolll/article/details/18599155
Regan-lin 2013-07-05
  • 打赏
  • 举报
回复
加载了就已经执行了一次了,下面改变数据操作又一次,绑定数据又一次了,你为什么不直接绑定一次执行要绑定这么多次呢?
zf904 2013-07-05
  • 打赏
  • 举报
回复 1
“此事件会在选择或取消选择单元格(无论是以编程方式还是通过用户操作的方式)时发生” 这意味着无论是在代码运行还是用户操作阶段,只要所选的单元格发生更改就会触发SelectionChanged事件。 你的DataGridView在加载表格记录时会影响到单元格的默认选择位置发生改变(例如增加行增加列都有可能), 从而会多次触发SelectionChanged事件。 解决办法:在加载时设置开关控制。
number1170196649 2013-04-23
  • 打赏
  • 举报
回复
这是什么原因呢,我的第一次初始化的时候只有1次,再次绑定的时候触发四次。太消耗性能了。
冰刀先生 2012-08-02
  • 打赏
  • 举报
回复
控件加载初始化的时候会执行,数据源改变的时候会执行,中间列行变化的时候也会执行,断点调试看看吧
冰刀先生 2012-08-02
  • 打赏
  • 举报
回复
控件加载初始化的时候会执行,数据源改变的时候会执行,中间列行变化的时候也会执行,断点调试看看吧
冰刀先生 2012-08-02
  • 打赏
  • 举报
回复
控件加载初始化的时候会执行,数据源改变的时候会执行,中间列行变化的时候也会执行,断电调试看看吧
dieshangxiao 2012-08-02
  • 打赏
  • 举报
回复
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);

交换顺序,执行的次数就发生了变化
bdmh 2012-08-02
  • 打赏
  • 举报
回复
每次load都+=了,你应该在创建时绑定一次就够了,绑定多次就会执行多次
dieshangxiao 2012-08-02
  • 打赏
  • 举报
回复
这个我该怎么加断点调试呢
我只是运行了一个datasource的赋值操作,内部是怎么实现的没办法调试啊

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧