0

datagridviewコントロールのデータソースであるデータテーブルにデータを入力するSQLServerデータベースがあります。次の文字列で始まる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列と同じであるため、これがどのように可能かわかりません。何か案は?

4

2 に答える 2

1

行を移動する:

tabNewCheckpoint.Controls.Add(dgvNewCheckpoint)

すぐ下:

tabctrlTimingTable.TabPages.Add(tabNewCheckpoint)

この問題を解決しました。

于 2012-12-07T00:32:12.817 に答える
0

DataGridViewで列を非表示にする方法を知っていると仮定すると、StartsWith()を使用します。

于 2012-12-06T19:11:46.697 に答える