DataGridView问题,不可见行仍然可见,尽管有DataSource,DataGridView仍为空

时间:2009-07-30 15:20:54

标签: vb.net datagridview datasource rows

DataGridView中的行有几个问题。

背景信息DataGridViewDataGridViewCalib)位于TabPage的一个TabControl中,DataGridView的某些列会自动{ {1}} DataGridViewCheckBoxColumn有一些列DataSource。这是使用Visual Studio 2008在VB.Net中编写的Windows窗体。用户加载输入数据文件。

问题:

1)首次到达Boolean时,会调用TabPage(下面的代码)。然后,所有行都显示在ShowDataGridViewCalib中,尽管代码说某些行不应该是可见的。代码中的断点显示代码确实到达了DataGridView个事件。 尽管显示了所有行,但调试器中的Watch显示:

Rows.Visible = False

DataGridViewCalib.DisplayedColumnCount(True)=0 DataGridViewCalib.DisplayedColumnCount(False=0) DataGridViewCalib.DisplayedRowCount(True)=0 DataGridViewCalib.DisplayedRowCount(False)=0 按预期工作。

第二次运行子例程Columns.Visible=False时,通过从ShowDataGridViewCalib checkbox强制执行子例程,行数减少的工作原理和{{1}是正确的。

是什么原因导致整个CbUniform第一次出现?

2)用户可以加载另一个输入数据文件。当加载第二个输入文件并运行DataGridViewCalib.Displayed...Count时,会发生另一个奇怪的事情。 DataTableShowDataGridViewCalib与[{1}}具有相同的属性, 但

DataGridViewCalib.DataSource =  {System.Data.DataTable}

DataTable中没有显示任何内容。 在加载第二个输入文件之前,大部分数据都会被清除,包括dtCatchCalibDataGridViewCalib.Columns.Count = 0 DataGridViewCalib.Rows.Count = 0 。特别是对于第二个问题,我假设错误可能在DataGridView之外的某个地方,但我会非常高兴有关DataGridViewCalib.Columns.Clear()dtCatchCalib.Clear()但仍然没有行的原因的提示和列。

代码:

ShowDataGridViewCalib

在代码中有两种处理行的替代方法。第一次尝试(在这里评论)可能是“最好的”。

这是我第一次将问题发布到编程论坛。如果我没有表达足够的信心,请再问我一次。

2 个答案:

答案 0 :(得分:0)

我仍然不知道为什么程序的行为如上所述,但我现在有一个解决方法。我显示的DataTable无论如何都是一个临时的DataTable,它组合了我想要展示的两个不同DataTables的列。因此,我已经从此临时DataTable中删除了行,而不是通过DataGridView执行此操作。通过CellValueChanged事件,我将临时DataTable中的更改传递给原始DataTables

答案 1 :(得分:0)

我通过设置

解决了第二个问题
DataGridViewCalib.DataSource=Nothing

当我在加载新文件之前清除表单和数据时。

我在这里还有一个额外的回复http://social.msdn.microsoft.com/Forums/en-US/winformsdatacontrols/thread/27e46f65-f27b-4f24-805f-209f02b29574

来自Aland Li,

  

根据您的描述,这两个问题有一个共同的特点:我们确实设置了Visible属性,但它没有做出反应。原因主要是我们在DataGridView中设置行的Visible属性后再次绑定数据源。例如,我们将所有行设置为不可见,方法是将它们的Visible属性设置为false,并期望它们被隐藏。但是,在我们设置Visible属性并重新创建行之后,数据源可能会再次绑定。旧行被处理,因此设置不会做出反应。新行已初始化,其Visible属性为true。因此行仍然可见。   您可以通过跟踪DataBindingComplete事件来跟踪数据源绑定。您可以为该事件添加处理程序并显示一些消息。然后你会知道数据源是否再次绑定。

尼罗河