将数据集/表绑定到DataGridView

时间:2018-03-28 17:04:30

标签: vb.net visual-studio data-binding datagridview

我目前正在编写一个链接到数据库的简单库存控件Visual Basic程序。

Here's what it looks like so far.

表单在DataGrid视图中显示数据,我正在尝试在我正在使用的数据库中更改数据(使用SQL)时自动刷新DataGridView。

经过一些研究后我发现最好的方法是将数据表(使用BindingSource)绑定到DataGridView

但是我正在努力实现这一点,因为我尝试的每个实现都会产生一个空白的DataGridView,如果有人可以帮助我,我会非常感激。

以下是代码:

Imports System.Data.OleDb

Public Class Form1
Public connectionString As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=dbStock.accdb"
Public conn As New OleDb.OleDbConnection(connectionString)

Public Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    Me.TblStockControlTableAdapter.Fill(Me.DbStockDataSet.tblStockControl)

    For i As Integer = 1 To 5
        ComboBoxQty1.Items.Add(i)
        ComboBoxQty2.Items.Add(i)
    Next

    Dim SqlQuery As String = "Select tblStockControl.[EggType] FROM tblStockControl"
    Dim da As OleDbDataAdapter = New OleDbDataAdapter(SqlQuery, conn)
    Dim ds As DataSet = New DataSet
    da.Fill(ds, "tblStockControl")
    Dim dt As DataTable = ds.Tables("tblStockControl")
    'DataGridView1.DataSource = dt

    For Each row As DataRow In dt.Rows
        ComboBoxAdd.Items.Add(row.Item(0))
    Next

    For Each row As DataRow In dt.Rows
        ComboBoxTake.Items.Add(row.Item(0))
    Next

End Sub

Private Sub btnAddEgg_Click(sender As Object, e As EventArgs) Handles btnAddEgg.Click

    conn.Open()

    Dim SqlQuery As String = "Select tblStockControl.[Quantity] FROM tblStockControl WHERE EggType = '" & ComboBoxAdd.Text & "'"

    Dim da As OleDbDataAdapter = New OleDbDataAdapter(SqlQuery, conn)
    Dim ds As DataSet = New DataSet
    da.Fill(ds, "tblStockControl")
    Dim dt As DataTable = ds.Tables("tblStockControl")

    Dim qty As Integer = 0

    For Each row As DataRow In dt.Rows
        For Each column As DataColumn In dt.Columns
            qty = row(column)
        Next
    Next

    Dim NewQty As Integer = qty + CInt(ComboBoxQty2.Text)

    UpdateAddQty(NewQty)

    conn.Close()

End Sub

Function UpdateAddQty(ByRef NewQty As Integer) As Integer
    Dim SqlUpdate As String = "UPDATE tblStockControl SET Quantity = '" & NewQty & "' WHERE EggType = '" & ComboBoxAdd.Text & "'"

    Dim SqlCommand As New OleDbCommand
    With SqlCommand
        .CommandText = SqlUpdate
        .Connection = conn
        .ExecuteNonQuery()
    End With

    Return (Nothing)
End Function

Private Sub btnViewStock_Click(sender As Object, e As EventArgs) Handles btnViewStock.Click
    'Add code to open Access file.
End Sub

Private Sub btnTakeEgg_Click(sender As Object, e As EventArgs) Handles btnTakeEgg.Click
    conn.Open()

    Dim SqlQuery As String = "Select tblStockControl.[Quantity] FROM tblStockControl WHERE EggType = '" & ComboBoxTake.Text & "'"

    Dim da As OleDbDataAdapter = New OleDbDataAdapter(SqlQuery, conn)
    Dim ds As DataSet = New DataSet
    da.Fill(ds, "tblStockControl")
    Dim dt As DataTable = ds.Tables("tblStockControl")

    Dim qty As Integer = 0

    For Each row As DataRow In dt.Rows
        For Each column As DataColumn In dt.Columns
            qty = row(column)
        Next
    Next

    Dim NewQty As Integer = CInt(ComboBoxQty1.Text) - qty

    UpdateTakeQty(NewQty)

    conn.Close()
End Sub

Function UpdateTakeQty(ByRef NewQty As Integer) As Integer
    Dim SqlUpdate As String = "UPDATE tblStockControl SET Quantity = '" & NewQty & "' WHERE EggType = '" & ComboBoxTake.Text & "'"

    Dim SqlCommand As New OleDbCommand
    With SqlCommand
        .CommandText = SqlUpdate
        .Connection = conn
        .ExecuteNonQuery()
    End With

    Return (Nothing)
End Function

结束班

1 个答案:

答案 0 :(得分:0)

如果您使用的是DataTable,请重置DataGridView的数据源。我的意思是您需要再次从数据库中读取数据。 :

'Do this every time you add/Update a data
Dim da As OleDbDataAdapter = New OleDbDataAdapter(SqlQuery, conn)
Dim ds As DataSet = New DataSet
da.Fill(ds, "tblStockControl")
Dim dt As DataTable = ds.Tables("tblStockControl")

或者您可以为添加到数据库的每个数据创建一行:

 'Do this every time you add a data
 DataGridViewRow row = (DataGridViewRow)DataGridView1.Rows[0].Clone()
 row.Cells[0].Value = "Alex"
 row.Cells[1].Value = "Jordan"
 DataGridView1.Rows.Add(row)