1

Access データベースの特定のテーブルのすべてのフィールドを表示するリスト ボックスを作成しようとしています。私はいくつかのテーブルを持っていますが、アイデアは、各テーブルを異なるボタンでロードすることです (そして、ボックス内のアイテムをクリアします)。1 つの秘訣は、テーブルがすべて同じサイズではないということです。各テーブルにすべてのフィールドを表示するにはどうすればよいですか。私が今持っているのは、1つのフィールドのみを表示しています:

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Dim connString As String = "Provider=Microsoft.ACE.OLEDB.12.0;data source='C:\dummy_data.accdb';"
    Dim conn As New OleDbConnection(connString)
    Dim sql As String = "SELECT * FROM Customers"
    Dim cmd As New OleDbCommand(sql, conn)
    conn.Open()
    Dim reader As OleDbDataReader = cmd.ExecuteReader()
    ClientList.Items.Clear()
    While reader.Read()
        ClientList.Items.Add(reader(0).ToString())
    End While
    reader.Close()
    conn.Close()

End Sub
4

2 に答える 2

1

DataGridViewa の代わりに aを使用することに抵抗がない場合は、次のListViewようにすることができます。

    Dim connString As String = "Provider=Microsoft.Jet.OLEDB.4.0;data source='PathToMyDatabase';"
    Dim sql As String = "SELECT * FROM Tメイン;"

    Dim dt As DataTable

    With New OleDbDataAdapter(sql, connString)
        Dim ds As New DataSet()
        .Fill(ds)
        dt = ds.Tables(0)
    End With

    Me.DataGridView1.DataSource = dt

私のコンピューターには「ACE.OLEDB」がないため、代わりに JET プロバイダーを使用する必要がありましたが、同じように動作するはずです。

DataTableこのメソッドを使用して DB からデータを取得できることを付け加えておきますが、aを aにバインドする簡単な方法はなくListView(たとえば、この MSDN の質問を参照)、列をループする必要があります。最初にDataTable列ヘッダーを追加してListViewから、行をループしてデータを追加します。

アップデート:

からデータをエクスポートする方法についての質問に答えるためにDataGridView、少し前にそれを行うためのコードを書いたことを思い出しました。

Private Function ExportToExcelFile(ByVal FileName As String) As Boolean

    With New Excel.Application
        With .Workbooks.Add()
            For Each sheet As Worksheet In .Worksheets
                If sheet.Index > 1 Then
                    Call sheet.Delete()
                End If
            Next
            With CType(.Worksheets(1), Worksheet).Range("A1")
                For Each column As DataGridViewColumn In Me.dgvData.Columns
                    .Offset(0, column.Index).Value = column.HeaderText
                    For Each row As DataGridViewRow In Me.dgvData.Rows
                        .Offset(row.Index + 1, column.Index).Value = row.Cells(column.Index).Value
                    Next
                Next
            End With
            Call .SaveAs(FileName)
        End With
        Call .Quit()
    End With

End Function

これがあなたが始めるのに役立つことを願っています。

于 2013-03-19T01:13:56.573 に答える
1

Listview コントロールを使用すると、次のコードでうまくいくはずです。簡単にするために、4 つの顧客フィールドのみを定義しました。テーブル フィールドの定義に従って定義する必要があります。

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    ClientList.View = View.Details
    ClientList.FullRowSelect = True
    ClientList.Columns.Add("ID", 120)
    ClientList.Columns.Add("Name", 120)
    ClientList.Columns.Add("Address", 140)
    ClientList.Columns.Add("Email", 100)
    Dim connString As String = "Provider=Microsoft.ACE.OLEDB.12.0;data source=C:\dummy_data.accdb;"
    ClientList.Items.Clear()
    Using conn As New Data.OleDb.OleDbConnection(connString)
        conn.Open()
        Dim sql As String = "SELECT * FROM Customers"
        Using cmd As New Data.OleDb.OleDbCommand(sql, conn)
            Dim lvi As ListViewItem
            Using oRDR As Data.OleDb.OleDbDataReader = cmd.ExecuteReader
                While oRDR.Read()
                    lvi = ClientList.Items.Add(oRDR.GetValue(0).ToString)
                    For i = 1 To oRDR.FieldCount - 1
                        lvi.SubItems.Add(oRDR.GetValue(i).ToString)
                    Next
                End While
            End Using
        End Using
        conn.Close()
    End Using

End Sub
于 2013-03-19T01:28:55.457 に答える