如何通过列名称以字符串开头的字符串搜索SQL Server数据库中的列?

时间:2012-12-06 19:05:00

标签: vb.net sql-server-2008 datagridview

我有一个SQL Server数据库,用于填充数据表,该数据表是datagridview控件的数据源。我想隐藏datagridview控件中以字符串开头的所有列:

strColumnName = "Checkpoint " & intCheckpointNumber

我该怎么做?我正在使用VB2010。

我结束的地方显然不起作用如下:

Do While intCheckpoint < intTotalCheckPoints
    If Me.datagridview.Columns ' I cannot figure out how to insert something along the lines of Name.StartsWith(strColumnName)' Then 
        'Hide this column with something along the lines of 'Me.datagridview.Columns(strColumnName).Visible = False
    End If
    intCheckPoint += 1
Loop

我无法弄清楚如何根据列名开头隐藏列。

由于

好的,我修改了我的代码,最后得到了以下内容:

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)

            strColumnName = "Checkpoint " & intCheckPointNumber
            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
        Else
            Exit Do
        End If
        intCheckPointNumber += 1
    Loop
Catch ex As Exception
    'MessageBox.Show(ErrorToString)
End Try

我现在遇到的问题是列仍未隐藏。如果我在程序中插入停止,我可以看到代码甚至没有处理For ... Next循环。会导致这种情况的原因是什么?

由于

好的,现在我改变了:

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 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

它给了我一个错误:“对象引用没有设置为对象的实例”,但datagridview列与datatable列的名称相同,所以我看不出这是怎么回事。有什么想法吗?

2 个答案:

答案 0 :(得分:1)

移动线:

tabNewCheckpoint.Controls.Add(dgvNewCheckpoint)

紧接下方:

tabctrlTimingTable.TabPages.Add(tabNewCheckpoint)

解决了这个问题。

答案 1 :(得分:0)

假设您知道如何隐藏DataGridView中的列,我会使用StartsWith()