Как заполнить таблицу данных WPF из таблицы данных? - PullRequest
0 голосов
/ 07 января 2011

Я новичок здесь, так что прости меня, если это неправильный раздел для моего вопроса.Моя проблема в том, что я не могу заполнить таблицу данных содержимым набора данных.Искал последние несколько дней, чтобы попытаться решить эту проблему, я сдался и подумал, что попробую здесь.Я использую Vs 2010 VB.Net, и это приложение WPF. Как вы можете видеть из кода, я очень новичок в этом, и любые предложения по улучшению будут приветствоваться.Я вижу, что набор данных заполняется нормально через визуализатор, у меня есть сетка данных 'dgBOM', которую я хочу отобразить результаты.Популярным решением в моих поисках было добавление «.DataSource», но когда я набираю «.»после dgBOM опция источника данных отсутствует.

Любая помощь будет принята с благодарностью.

Спасибо.

Код:

Public Sub Connect()
    Dim cn As OleDbConnection
    Dim cmd As OleDbCommand
    Dim dr As OleDbDataReader
    Dim ds As DataSet
    Dim da As OleDbDataAdapter
    Dim dt As DataTable
    Dim drow As DataRow
    Dim PartColumn As DataColumn
    Dim CostColumn As DataColumn
    dt = New DataTable("BOM")
    ds = New DataSet("BOM")
    PartColumn = New DataColumn("PartNo")
    CostColumn = New DataColumn("Cost")
    da = Nothing
    cn = Nothing
    dr = Nothing
    Try
        cn = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=\\Ls-wtgl834\share\Adrian\PriceLists\WAP-PriceLists.mdb;User ID=Admin")
        cn.Open()
        cmd = New OleDbCommand("select * from Inventory", cn)
        dr = cmd.ExecuteReader
        da = New OleDbDataAdapter(cmd)
        dt.Columns.Add(PartColumn)
        dt.Columns.Add(CostColumn)
        While dr.Read()
            If dr(0) = FBladeExtNo Then
                FrontBladeCost = dr(1)
                drow = dt.NewRow()
                drow("PartNo") = FBladeExtNo
                drow("Cost") = FrontBladeCost
                dt.Rows.Add(drow)
                ds.Tables.Add(dt)
                Exit While
            End If
        End While
        dgBOM.ItemsSource = ds
    Catch
    End Try
    dr.Close()
    cn.Close()
End Sub 

1 Ответ

0 голосов
/ 08 января 2011

Я отказался от DataReader и все такое.После написания программы пару лет назад, где я должен был предоставить всю логику для отслеживания изменений и параллелизма и отслеживания отношений, и все, что я бросил в руки, потому что это требовало много времени.

В настоящее время я использую O / RM framework;это отображение объектов / отношений.На данный момент двумя важными являются Entity Framework (моя любимая среда) и NHibernate (изначально написанная для Java, но перенесенная для .NET).Эти платформы позволяют отображать таблицы базы данных в классы .NET.Либо те, что вы пишете сами, либо сгенерированные инструментом (в случае Entity Frameworks.

EF в Visual Studio 2010 позволяет выполнять разработку Model-First и Database-First. Model-First позволяет создавать диаграммуо том, как вы хотите, чтобы ваши классы связывались друг с другом (например, класс Customer, который имеет коллекцию адресов, телефонных номеров и событий), затем генерирует базу данных для хранения этих данных. Database-First - это наоборот. Вы создаете базу данных иEF пытается создать модель, отражающую структуру базы данных, которая заботится о создании строки подключения, отслеживании изменений сущностей и параллелизме, а также представляет данные в хороших объектах, которые, на мой взгляд, создаются чертовски быстро. Лично я нашел данные EFsпоиск выполняется быстрее, чем мой собственный поиск данных и заполнение объектов.

WPF, с его возможностями привязки данных, больше ориентирован на эти объекты данных (здесь, после того как я просто назову их объектами), чем на DataReaders и DataAdaptERS.Если вы хотите погрузиться прямо в это, вот немного видео Microsoft о начале работы с EF.Также обязательно ознакомьтесь с WindowsClient.net , поскольку там тоже есть кое-что хорошее.

Позже, когда вы освоите EntityFramework, посмотрите шаблон проектирования MVVM.

...