簡體   English   中英

在運行時創建多個datagridview控件時,如何隱藏列?

[英]When creating multiple datagridview controls at runtime, how do you hide columns?

在運行時生成的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。 當我更改它以引用數據庫中的列時,實際上得到了結果。 我在這里錯誤地引用了這些列嗎?

在綁定到數據表之前,應將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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM