如何在vb.net中将access中的数据添加到wpf datagrid
如何将access db中的数据添加到wpf数据网格中。我曾尝试使用datatable作为数据源,但它给出了一个错误。我也尝试过使用itemsource,而不是像一些来源所建议的那样使用datasource,但没有成功。实际上,在用代码填充数据表后,我被卡住了:如何在vb.net中将access中的数据添加到wpf datagrid,vb.net,ms-access,wpfdatagrid,Vb.net,Ms Access,Wpfdatagrid,如何将access db中的数据添加到wpf数据网格中。我曾尝试使用datatable作为数据源,但它给出了一个错误。我也尝试过使用itemsource,而不是像一些来源所建议的那样使用datasource,但没有成功。实际上,在用代码填充数据表后,我被卡住了: `Dim da As New OleDb.OleDbDataAdapter("SELECT activitynm as [Activity],motonum as [Car No], " & _
`Dim da As New OleDb.OleDbDataAdapter("SELECT activitynm as [Activity],motonum as [Car No], " & _
"startmile as [Start mileage],stopmile as [Stop mileage],proj_code as [Project]," & _
"ac_code as [Account code],month(miledate) as [Project month], year(miledate) as [Project year]" & _
" from carmileage where ac_code='""'", cnn2)
Dim dt As New DataTable
'fill data to datatable
da.Fill(dt)
//What to put here is the problem`
有人有线索。请帮助设置itemsource属性:
ID_Of_datagrid.ItemSource = dt.rows
我有解决这个问题的办法。我首先填充
ADODB.Recordset
,然后为DataGrid
创建列。您必须将每个列绑定到记录集中的列,然后我使用OleDb.OleDbDataAdapter
将记录集
连接到数据表
。然后设置DataGrid.ItemsSource=DataTable.DefaultView
以下是我的代码(我还对列进行了一些字符串格式化):
我得到了这个错误“无法将'System.Data.DataTable'类型的对象强制转换为'System.Collections.IEnumerable'”当我这样做时,我的bad没有意识到Datatables不是IEnumerable。但是,它们的行集合是。
Public Sub Polni_Tabelo()
Dim strQuery As String ' SQL stavek
Dim rsADO As New ADODB.Recordset 'Recordset iz baze
Dim col(9) As DataGridTextColumn ' Stolpci datagrid text colmns
Dim colCheck As New DataGridCheckBoxColumn
Dim myDataAdapter = New OleDb.OleDbDataAdapter ' adapter za prenašanje v datatable (public)
' Dim dr As DataRowView
Dim textStyle = New Style(GetType(TextBlock))
textStyle.Setters.Add(New Setter(TextBlock.TextWrappingProperty, TextWrapping.Wrap))
rsADO.CursorLocation = ADODB.CursorLocationEnum.adUseServer 'definicija lokacije kurzorja ? poglej W3Scool
rsADO.CursorType = ADODB.CursorTypeEnum.adOpenDynamic
rsADO.LockType = ADODB.LockTypeEnum.adLockOptimistic
Try
strQuery = "SELECT" & _
" Po.ID_Ponudbe AS ID" & _
", Po.Datum_Ponudbe AS Datum" & _
", Po.St_Ponudbe AS Stevilka" & _
", Podjetja.Naziv_Podjetja AS Podjetje" & _
", Po.Opis" & _
", Po.Cena_Ponudbe AS Cena" & _
", Po.DDV" & _
", Po.SALDO" & _
", Materialni_Stroski AS Strošek" & _
", Po.Narocilnica AS Naročilnica" & _
", Po.Naroceno AS Naročeno" & _
" FROM Podjetja" & _
" INNER JOIN" & _
" Ponudbe AS Po ON Podjetja.ID_Podjetja = Po.ID_Podjetja" 'Stavek za branje celotne tabele materiala
'strQuery = "SELECT * From Ponudbe Where ID_Ponudbe = 2"
rsADO.Open(strQuery, Application.conAdo) 'polni queri preko povezave ustvarjene v mainOknu
PonudbeDataGrid.Columns.Clear()
'i = rsADO.RecordCount
For i = 1 To 9
col(i) = New DataGridTextColumn 'definiraj nov stolpec
col(i).Header = rsADO(i).Name 'definiraj ime stolpca
col(i).Binding = New Binding(rsADO(i).Name) 'definiraj povezavo na bazo in format stolpca
col(i).MaxWidth = 300
Select Case i
Case 1
col(i).Binding.StringFormat = "{0:dd.MM.yyyy}"
Case 4
col(i).ElementStyle = textStyle
col(i).MaxWidth = 400
col(i).MinWidth = 100
Case 5, 6, 7, 8
col(i).Binding.StringFormat = "{0:#,##0.00 €}" ' "x.xx0,00 €"
Case Else
End Select
PonudbeDataGrid.Columns.Add(col(i)) 'dodaj stolpec v datagrid
Next
colCheck.Header = rsADO(10).Name
colCheck.Binding = New Binding(rsADO(10).Name)
colCheck.CanUserResize = False
PonudbeDataGrid.Columns.Add(colCheck)
'MaterialDataGrid.Style.Setters.Add(New Setter(Control.VerticalAlignmentProperty, VerticalAlignment.Center))
PonudbeDataGrid.FontSize = Convert.ToInt32(Me.Font.Text)
PonudbeDataGrid.ColumnHeaderHeight = 30
PonudbeDataGrid.MinRowHeight = 30
myDataTable = New DataTable 'ustvari novo DataTabelo
myDataAdapter.Fill(myDataTable, rsADO) 'polni DataTabelo z recordsetom
With PonudbeDataGrid
.ItemsSource = myDataTable.DefaultView 'Vnos DataTable v datagrid
End With
PonudbeDataGrid.UpdateLayout()
rsADO.Close()
Catch ex As Exception
MsgBox(ex.Message)
End Try
myDataAdapter = Nothing
rsADO = Nothing
myDataTable.DefaultView.Sort = "Stevilka"
End Sub