如图,WinForm项目中创建一个窗体,窗体命名为MainFrm。
在窗体上创建一个DataGridView命名为dgvBug
在窗体的初始化事件中创建一个四行,名为dt的DataTable,并将数据源指向dt:
private void MainFrm_Load(object sender, EventArgs e)
{
DataTable dt = new DataTable();
DataColumn Name = new DataColumn("Name",typeof(string));
dt.Columns.Add(Name);
dt.Rows.Add("111");
dt.Rows.Add("222");
dt.Rows.Add("333");
dt.Rows.Add("444");
dgvBug.DataSource = dt;
}
直接运行,可以看到结果:
然后在DataGridView的SelectionChanged事件中创建一个名为reader,值为空的SqlDataReader对象,并让reader读取一行
private void dgvBug_SelectionChanged(object sender, EventArgs e)
{
SqlDataReader reader = null;
reader.Read();
}
运行,可以看到DataGridView只显示了一行,而且系统不会显示地抛出异常
这意味着,程序如果当DataGridView的选中行发生变化时, 出现了空的SqlDataReader并令空的reader读取了一行,那么将严重影响DataGridView的数据读入,且此Bug不易被排查。