复现一个DataGridView仅显示一行且不显式抛异常的Bug

来源:互联网 发布:论文数据伪造 编辑:程序博客网 时间:2024/06/13 13:21

如图,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

然后在DataGridView的SelectionChanged事件中创建一个名为reader,值为空的SqlDataReader对象,并让reader读取一行

private void dgvBug_SelectionChanged(object sender, EventArgs e){    SqlDataReader reader = null;    reader.Read();}

运行,可以看到DataGridView只显示了一行,而且系统不会显示地抛出异常
发生异常的DataGridView

这意味着,程序如果当DataGridView的选中行发生变化时, 出现了空的SqlDataReader并令空的reader读取了一行,那么将严重影响DataGridView的数据读入,且此Bug不易被排查。

原创粉丝点击