[C#]datagridView实现的数据联动时selectionChanged事件发生多次的解决方法

Q:对于两个datagridView实现的数据联动,主datagridView绑定数据时selectionChanged事件发生多次,什么原因,如何避免?
A:selectionChanged事件MSDN上叙述:“在当前选择出现更改时发生。”
实际应用中,子表数据填充代码要写在selectionChanged事件响应方法中。
经测试,selectionChanged事件有如下规律:
SelectionChanged事件发生次数与触发方式和dataGridView中是否有数据有关。
1.由数据绑定触发,如果dataGridView中原来无数据,则SelectionChanged事件发生1次;(从没有选定行到有选定行。)
2.由数据绑定触发,如果dataGridView中原来有数据,则SelectionChanged事件发生2次;(取消选定行发生1次,选定新行发生1次。)
3.由用户(鼠标或键盘动作)触发,dataGridView中原来有数据,则SelectionChanged事件发生1次;


解决方法:设置一个开关变量
/// <summary>
/// 防止数据绑定时发生多次SelectionChanged事件,设置开关变量
/// </summary>
private static byte SelectionChangedTimes;

每次数据绑定前设置开关变量的值
if (dgvIn.Rows.Count == 0)
SelectionChangedTimes = 1;  // 无数据直接跨过阀值
else
SelectionChangedTimes = 0;  // 有数据设定小于阀值
dgvIn.DataSource = dtIn;

// SelectionChanged中对开关变量进行判断,决定是否对子表进行数据绑定
private void dgvIn_SelectionChanged(object sender, EventArgs e)
{
if (++SelectionChangedTimes == 1)
return;
else
if (SelectionChangedTimes >= 255)
SelectionChangedTimes = 2;  // 防止数据越界

if (null != dgvIn.CurrentRow)
{
// 对子表进行数据绑定
}


}

你可能感兴趣的:(datagridview,数据联动)