动态添加控件(DataGridView)无法正常工作

时间:2016-06-27 10:22:10

标签: vb.net

我发布了一个问题here,经过多次尝试后,我接受了建议我使用隐藏控件而不是添加控件的答案。

这样我的代码运行正常,但我想了解错误。

发生了什么: 当我按下一个按钮时,会添加一个新的DataGridView但是 a)即使其可见属性设置为True,它也不可见;
b)如果(当添加的DGV在表格上时)我将DGV属性设置为False,然后我将其重新设置为True,DGV出现但列没有调整大小;
c)如果我删除添加的DGV并重新添加它,它是"隐形"再次。

如果我跑另一个,那么所有这些麻烦都不会发生

如果:
a)我运行一个隐藏我的第一个表格并显示另一个表格的子;
b)然后我关闭第二个表格以回到第一个表格;
一切正常:
DGV正确添加;
它是可见的;
所有列都已正确调整大小;
如果我删除DGV或重新添加它,一切仍然有效。

我哪里错了?

1 个答案:

答案 0 :(得分:0)

这是我之前链接中的代码。它在我的表单中显示了datagridview。正如您所看到的,它正是您的代码,除了“使用”块 - 以及检索数据表的方式。这是唯一的两个不同之处。

Private Sub ShowHideTbl()
    Dim DTemp As DataTable = GetTable()
    Dim DGV_Tbl As DataGridView = Nothing
    Try
        DGV_Tbl = CType(Me.Controls("DGV_Tbl"), DataGridView)
    Catch ex As Exception
        MsgBox(ex.ToString)
    End Try
    If DGV_Tbl Is Nothing Then
        If Me.CBox_ProcType.Text = "Select a Procedure" Then
            MsgBox("You need To select a Procedure", vbInformation, "Unable to show table")
            Exit Sub
        End If
    End If
    DGV_Tbl = New DataGridView
    With DGV_Tbl
        .Name = "DGV_Tbl"
        .DataSource = DTemp
        Me.Controls.Add(DGV_Tbl)
        .AutoResizeColumns(DataGridViewAutoSizeColumnsMode.AllCells)
        .RowHeadersVisible = False
        .AllowUserToAddRows = False
        .AllowUserToDeleteRows = False
    End With
    Dim DGV_H As Integer = 0
    Dim DGV_W As Integer = 0
    For Each S As DataGridViewRow In DGV_Tbl.Rows
        DGV_H += S.Height
    Next
    DGV_H += DGV_Tbl.ColumnHeadersHeight
    'Add more space to include spaces between cells
    DGV_H += CInt(DGV_Tbl.Rows.Count * 0.45)
    For Each S As DataGridViewColumn In DGV_Tbl.Columns
        DGV_W += S.Width
    Next
    'Add more space to include spaces between cells
    DGV_W += CInt(DGV_Tbl.Columns.Count * 0.45)
    DGV_Tbl.Height = DGV_H
    DGV_Tbl.Width = DGV_W
    'Resize the Form
    Me.Height += DGV_H + 30
    Me.Controls("DGV_Tbl").Location = New Point(15, Me.Height - DGV_H - 30)
End Sub

你的问题最奇怪,因为我没有尝试和测试的代码,我唯一建议你将这段代码粘贴到一个新的表单中,看看它是否有效。如果是,则将表单1的其他控件添加到其中,再次运行代码,看它是否仍然有效。重复这个过程,直到找出原因。

我相信你可以通过这个找到你表单中真正发生的事情。谁知道,这种新形式可能会奏效。