1

我在运行时生成的 datagridview 控件中隐藏列时遇到了一些麻烦。我在现有选项卡控件的运行时生成的选项卡页内生成该控件。我的代码如下:

Try
    Do
        If m_DataTable.Columns.Contains("Checkpoint " & intCheckPointNumber & " Time") Then
            Dim tabNewCheckpoint As New TabPage
            Dim dgvNewCheckpoint As New DataGridView

            tabNewCheckpoint.Name = "tabCheckpoint" & intCheckPointNumber
            tabNewCheckpoint.Text = "Checkpoint " & intCheckPointNumber
            tabctrlTimingTable.TabPages.Add(tabNewCheckpoint)

            dgvNewCheckpoint.Name = "dgvCheckpoint" & intCheckPointNumber
            dgvNewCheckpoint.DataSource = m_DataTable
            dgvNewCheckpoint.Size = dgvTimingP2P.Size
            tabNewCheckpoint.Controls.Add(dgvNewCheckpoint)

            Try
                strColumnName = "Checkpoint " & intCheckPointNumber
                For Each col As DataColumn In m_DataTable.Columns
                    MessageBox.Show(col.ColumnName)
                    If col.ColumnName.StartsWith("Checkpoint") Then
                        If Not col.ColumnName.StartsWith(strColumnName) Then
                            dgvNewCheckpoint.Columns(col.ColumnName).Visible = False
                        End If
                    End If
                Next
            Catch
                MessageBox.Show(ErrorToString)
            End Try
        Else
            Exit Do
        End If
        intCheckPointNumber += 1
    Loop
Catch ex As Exception
    'MessageBox.Show(ErrorToString)
End Try

col.ColumnName 值确实直接对应于数据库中的列,但在此行上会立即生成错误:

dgvNewCheckpoint.Columns(col.ColumnName).Visible = False

我不断收到的错误是:“对象引用未设置为对象的实例”

此代码适用于我在选项卡控件的另一个选项卡页内的 datagridview 控件,这些控件都是在设计时创建的。

在创建运行时生成的 datagridview 后立即隐藏列是否有问题?

我正在使用 VB2010。

我最初确实使用了以下代码:

For Each col As DataGridViewColumn In dgvNewCheckpoint.Columns
MessageBox.Show(col.Name)
    If col.Name.StartsWith("Checkpoint") Then
        If Not col.Name.StartsWith(strColumnName) Then
            col.Visible = False
        End If
    End If
Next

我在这里遇到的问题是程序直接跳过了这个 For...Next 循环,因为它不能在 dgvNewCheckpoint datagridview 控件中看到 DataGridViewColumns。当我将其更改为引用数据库中的列时,我实际上得到了结果。我在这里错误地引用了列吗?

4

1 回答 1

1

在绑定到数据表之前,应将 DGV 添加到控制列表中。因此,该行应按如下方式移动:

Dim tabNewCheckpoint As New TabPage
Dim dgvNewCheckpoint As New DataGridView

tabNewCheckpoint.Name = "tabCheckpoint" & intCheckPointNumber
tabNewCheckpoint.Text = "Checkpoint " & intCheckPointNumber
tabctrlTimingTable.TabPages.Add(tabNewCheckpoint)

tabNewCheckpoint.Controls.Add(dgvNewCheckpoint) 'This is the line to be moved

dgvNewCheckpoint.Name = "dgvCheckpoint" & intCheckPointNumber
dgvNewCheckpoint.DataSource = m_DataTable
dgvNewCheckpoint.Size = dgvTimingP2P.Size
于 2012-12-06T23:46:47.443 回答