[英]VB.net Update MS Access from DataGridView with BindingSource
我有一個用SQL語句填充的DataGridView,用戶可以在某些列上輸入數據:
Me.bndDataGrid.DataSource = GetData("SELECT H.InnCode, R.RSRM, " & strCols & " E.Escalation " & _
"FROM (((dbo_HotelInfo AS H " & _
"INNER JOIN dbo_RSRM AS R ON H.RevMgr = R.ID) " & _
"INNER JOIN dbo_SrMgr AS S ON R.SrMgr = S.ID) " & _
"INNER JOIN " & strHitList & " AS L ON H.FacilityID = L.FacilityID) " & _
"INNER JOIN dbo_Escalation AS E ON H.FacilityID = E.FacilityID " & _
"WHERE S.ID = " & cbxSrMgr.SelectedValue.ToString)
With Me.grdQueryResults
.AutoGenerateColumns = True
.DataSource = bndDataGrid
End With
bndDataGrid是grdQueryResults(DataGridView)的BindingSource。 GetData的代碼通常在MS論壇上找到:
Private Shared Function GetData(ByVal sqlCommand As String) As DataTable
Dim strConn As String = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source={MS Access DB Path Here};"
Dim ctnHitList As OleDbConnection = New OleDbConnection(strConn)
Dim tblHitList As New DataTable
Dim cmdHitList As New OleDbCommand(sqlCommand, ctnHitList)
Dim adrHitList As OleDbDataAdapter = New OleDbDataAdapter()
adrHitList.SelectCommand = cmdHitList
tblHitList.Locale = System.Globalization.CultureInfo.InvariantCulture
adrHitList.Fill(tblHitList)
Return tblHitList
End Function
現在,一旦用戶准備好保存更改,我就無法終生思考如何正確保存此更改,這主要是因為DataGridView的數據源不只是綁定到表上。
編輯:
是的,所以我主要按照Crowcoder的博客頁面對代碼進行了全面檢查,並進行了進一步的改進,但是現在在更新時,我遇到了“並發沖突:UpdateCommand影響了預期1條記錄中的0條”異常。 這是更新代碼:
Private Sub btnSave_Click(sender As Object, e As EventArgs) Handles btnSave.Click
Dim parInnCode As OleDbParameter = New OleDbParameter("@parInnCode", OleDbType.WChar)
Dim parNotes As OleDbParameter = New OleDbParameter("@parNotes", OleDbType.WChar)
parInnCode.SourceColumn = "InnCode"
parNotes.SourceColumn = "Notes"
Using ctnDataGrid As New OleDbConnection(getConnectionString())
Using cmdGrid As New OleDbCommand("UPDATE (dbo_The400 AS T INNER JOIN dbo_HotelInfo AS H ON T.FacilityID = H.FacilityID) " & _
"INNER JOIN dbo_RSRM AS R ON H.RevMgr = R.ID " & _
"SET [Notes] = @parNotes WHERE H.InnCode = @parInnCode", ctnDataGrid)
Using adrDataGrid As New OleDbDataAdapter()
With adrDataGrid
.UpdateCommand = cmdGrid
With .UpdateCommand.Parameters()
.Add(parInnCode)
.Add(parNotes)
End With
grdQueryResults.EndEdit()
.Update(tblDataGrid)
End With
End Using
End Using
End Using
End Sub
tblDataGrid是在表單類級別聲明的,想知道這可能是問題還是我的更新查詢與表中的列數不匹配? 或者是其他東西? 似乎找不到適合我的情況的正確答案:/
威爾普,終於我想通了。 它涉及大量的后端重組,以使其更容易通過前端.net應用程序連接到該后端。 基本上,我將所有經理的投入都放在一個表中,並添加了一列,該列對應於需要他們投入的計划。
從那里,我可以在“數據集設計器”中構建幾乎所有內容,並在該表適配器上設置“更新”命令以僅更新該表。 將主窗體上的代碼縮減為僅幾行,這些行填充了datagridview中組合框列的數據源。
這不是一個優雅的編碼解決方案,但是它有效!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.