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

如图,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不易被排查。

猜你喜欢

转载自blog.csdn.net/xiblade/article/details/74612677
今日推荐