2012-12-06 46 views
0

我有一个SQL Server数据库,用于填充数据表,它是datagridview控件的数据源。我想隐藏datagridview控件中以字符串开头的所有列:如何通过列名以字符串开头的字符串来搜索SQL Server数据库中的列?

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 Loop。什么会造成这种情况?

感谢

好了,现在我已经改变了:

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列与数据表列有相同的名称,所以我不明白这是可能的。有任何想法吗?

+0

代码的上下文是什么? “我”是指某种形式还是某种东西? –

+0

而不是循环检查点编号,循环遍历列。 '作为DataGridViewColumn在DataGridview.Columns ...'每个col ...' – prprcupofcoffee

+0

感谢大卫,这是非常有帮助的。我确实编辑了我原来的帖子,提出了另一个问题,提出了这种方法。 – J2Tuner

回答

1

移动线:

tabNewCheckpoint.Controls.Add(dgvNewCheckpoint) 

正下方:

tabctrlTimingTable.TabPages.Add(tabNewCheckpoint) 

解决了这个问题。

0

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

+0

我认为这将是最好的选择。我编辑了原始帖子,告诉你我结束了什么。 – J2Tuner

相关问题