【问题标题】:How to add data from access to wpf datagrid in vb.net如何在 vb.net 中从访问 wpf 数据网格中添加数据
【发布时间】:2012-12-28 16:39:18
【问题描述】:

如何将 access db 中的数据添加到 wpf 数据网格。我曾尝试使用数据表作为数据源,但它给出了一个错误。我也尝试过使用 itemsource 而不是 datasource ,就像一些消息来源建议的那样,但徒劳无功。实际上我在用代码填充我的数据表后被卡住了:

    `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`

有人有线索。请帮忙

【问题讨论】:

    标签: vb.net ms-access wpfdatagrid


    【解决方案1】:

    设置itemsource属性:

    ID_Of_datagrid.ItemSource = dt.rows
    

    A tutorial showing simple bindingAnother tutorial showing simple binding

    【讨论】:

    • 当我这样做时,我收到此错误“无法将'System.Data.DataTable' 类型的对象转换为'System.Collections.IEnumerable'”
    • 我的错误没有意识到 Datatables 不是 IEnumerable。但是他们的行集合是。
    【解决方案2】:

    我有解决方案。我首先填写ADODB.Recordset,然后为DataGrid 创建列。您必须将每一列绑定到 Recordset 中的列,然后我使用OleDb.OleDbDataAdapterRecordset 连接到DataTable。然后你设置DataGrid.ItemsSource = DataTable.DefaultView

    这是我的代码(我也对列进行了一些字符串格式化):

     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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-03-10
      • 1970-01-01
      • 2013-02-20
      • 2013-03-03
      • 2014-06-02
      • 1970-01-01
      • 2012-02-24
      • 1970-01-01
      相关资源
      最近更新 更多