2013-03-19 85 views
1

我想使列表框显示Access数据库中的特定表的所有字段。我有几张桌子,这个想法是让每个桌子都加载一个不同的按钮(并清除框中的项目)。一个诀窍是表格不是全部相同的大小。我如何获得每个表格显示的所有字段。我现在只显示一个字段:显示列表框中的所有字段从数据库,vb.net

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

你可以使用'DataAdapter'你想要的数据表的第一行加载到'DataTable'然后遍历表中的列并从那里读取信息。 – 2013-03-19 00:53:04

+0

如果这需要使用listview来完成,那么您是否可以为每个字段加载正确数量的列?我现在在玩那个。一个真正的优点是将字段名称/标签添加为字段名称。 – 2013-03-19 00:55:11

+0

ooops,当你说字段时,你是指每个表中每行的每个字段?或者你只是表示你想要每个表中可用字段的列表? – 2013-03-19 00:55:28

回答

1

如果你不反对使用DataGridView代替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绑定到ListView(见this MSDN question例如)没有简单的方法,你将不得不首先循环访问DataTable中的列,然后将列标题添加到您的ListView,然后遍历行并添加数据。

UPDATE:

要回答你的questiona s到如何将数据从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 

我希望这会帮助你开始。

+0

我可以直接从VS中的设计器添加'DataGridView'。我甚至不知道'DataGridView'存在。我很担心,因为我将它作为Excel的加载项来构建,您是否知道如何将选定的'DataGridView'项目添加到Excel工作表的任何好例子?我已经用列表框来进行用餐了,但是当我尝试对DataGridView进行修改时,我显然没有使用正确的语法/命令。 – 2013-03-19 01:29:15

+1

这实际上很简单,因为您可以遍历行和列并获取单元格值,因此将数据插入Excel非常容易。例如,看看这个SO问题:http://stackoverflow.com/questions/7777205/looping-through-datagridview – 2013-03-19 01:34:41

+0

如果你将'DataGridView'绑定到'DataTable',你也可以遍历'DataTable'以相同的方式并使用它来将数据导出到Excel。 – 2013-03-19 01:37:16

1

使用Listview控件,下面的代码应该做的伎俩。为了简单起见,我只定义了4场客 - 你需要定义他们根据你的表字段defintions:

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

有什么需要导入的这个子工作?我得到了多个错误:查看不在System.Windows.Forms.ListBox中,列不在System.Windows.Forms.Listbox等中 – 2013-03-19 01:36:49

+1

您必须将ListBox更改为ListView。 – 2013-03-19 02:02:57

+0

对不起,我以为自从你的开场白表示“使用ListBox ..”这是一个列表框。得到它的工作,也许你应该编辑该部分清晰? – 2013-03-19 04:59:49

相关问题