DataGridView
中的行有几个问题。
背景信息:DataGridView
(DataGridViewCalib
)位于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
时,会发生另一个奇怪的事情。 DataTable
此ShowDataGridViewCalib
与[{1}}具有相同的属性,
但
DataGridViewCalib.DataSource = {System.Data.DataTable}
DataTable
中没有显示任何内容。
在加载第二个输入文件之前,大部分数据都会被清除,包括dtCatchCalib
和DataGridViewCalib.Columns.Count = 0
DataGridViewCalib.Rows.Count = 0
。特别是对于第二个问题,我假设错误可能在DataGridView
之外的某个地方,但我会非常高兴有关DataGridViewCalib.Columns.Clear()
有dtCatchCalib.Clear()
但仍然没有行的原因的提示和列。
代码:
ShowDataGridViewCalib
在代码中有两种处理行的替代方法。第一次尝试(在这里评论)可能是“最好的”。
这是我第一次将问题发布到编程论坛。如果我没有表达足够的信心,请再问我一次。
答案 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事件来跟踪数据源绑定。您可以为该事件添加处理程序并显示一些消息。然后你会知道数据源是否再次绑定。
尼罗河