在没有标题的datagridview中显示数据库

时间:2015-05-08 21:34:17

标签: .net vb.net listview datagridview

我想将数据库表加载到datagridview,我可以编辑和更新列,我现在使用列表视图,但我想使用gartagridview,因为它更容易编辑其中的数据。

我使用此代码在列表视图中显示数据库中的数据:

Public Sub showlistview()
    Try
        Dim dt As New DataTable
        Dim ds As New DataSet
        ds.Tables.Add(dt)
        Dim da As New OleDbDataAdapter("select * from pay_pretalk where cust_id=" & pretalk_pay.TextBox4.Text & " order by sdate DESC ", con)
        da.Fill(dt)
        Dim myrow As DataRow
        For Each myrow In dt.Rows
            ListView1.Items.Add(myrow.Item(0))
            ListView1.Items(ListView1.Items.Count - 1).SubItems.Add(myrow.Item(2))
            ListView1.Items(ListView1.Items.Count - 1).SubItems.Add(myrow.Item(3))
            ListView1.Items(ListView1.Items.Count - 1).SubItems.Add(myrow.Item(4))
            ListView1.Items(ListView1.Items.Count - 1).SubItems.Add(myrow.Item(5))
            ListView1.Items(ListView1.Items.Count - 1).SubItems.Add(myrow.Item(6))
            ListView1.Items(ListView1.Items.Count - 1).SubItems.Add(myrow.Item(7))
        Next
    Catch ex As Exception
        MsgBox(ex.Message)
    End Try
End Sub

如何在datagridview中执行相同的操作而不显示数据库的标头并在datagridview属性中使用我的自定义标头。

如果我使用此代码在datagridview中显示数据:

        Dim dt As New DataTable
        Dim ds As New DataSet
        ds.Tables.Add(dt)
        Dim da As New OleDbDataAdapter("select * from pay_pretalk where cust_id=" & pretalk_pay.TextBox4.Text & " order by sdate DESC ", con)
        da.Fill(dt)
        DataGridView1.DataSource = dt

这显示所有带有标题的表!,但我已经添加了一个自定义标题,所以这会错过一切:(

2 个答案:

答案 0 :(得分:2)

使用检索到的数据表设置DataGridView.DataSource属性后,您可以启动一个简单的循环,将列标题文本更改为您的首选项

.....
dt.Columns.RemoveAt(1)
dataGridView1.DataSource = dt

for each cl As DataGridViewColumn in dataGridView1.Columns
    Select Case cl.HeaderText
        Case "FirstColumnName": 
           cl.HeaderText="MyColumn1Name" 
        Case "SecondColumnName": 
           cl.HeaderText="MyColumn2Name"
        case "ThirdColumnName": 
            cl.HeaderText="MyColumn3Name"

        ... and so on for the other columns ....
    End Select
Next

答案 1 :(得分:1)

您可以设置为false datagridview的auto generate columns属性,并使用每列的data property name属性将其映射到数据源列。

示例代码:

DataGridView1.AutoGenerateColumns = False
Dim index As Integer
index = DataGridView1.Columns.Add("ColumnA", "ColumnA")
DataGridView1.Columns(index).DataPropertyName = "Column1"
index = DataGridView1.Columns.Add("ColumnB", "ColumnB")
DataGridView1.Columns(index).DataPropertyName = "Column2"
index = DataGridView1.Columns.Add("ColumnC", "ColumnC")
DataGridView1.Columns(index).DataPropertyName = "Column3"

Dim dt As New DataTable
Dim ds As New DataSet
ds.Tables.Add(dt)
Dim da As New OleDbDataAdapter("SELECT Column1, Column2, Column3, Column4, Column5 FROM Table1 WHERE Condition = true", con)
da.Fill(dt)
DataGridView1.DataSource = dt

这样您就可以从表中选择Column1Column5,但只有Column1Column3会出现在DGV上;列标题也是ColumnAColumnBColumnC

您还可以在DataGridView上的设计时指定它,以保存一些代码并从非常开始的列中定义将出现以及如何;您只需在设置AutoGenerateColumns = false之前设置它的数据源。

DataPropertyName in design