1

私はLINQを初めて使用し、Linq to SQLテーブルをいくつかのコントロール(ツリービュー、テキストボックスなど)にバインドしようとしています。テキストボックスフィールドに変更を加えて、それらの更新をデータベースに簡単に保存できるようにしたいと思います。

以下を使用してデータベースからデータを取得できます。

    Private LinqDB As New DataContext(My.Settings.dbConnection)
    Property tblManufacturers As Table(Of dbManufacturers) _
        = LinqDB.GetTable(Of dbManufacturers)()

そして、それらをコントロールにバインドするのはとても簡単でした。TreeViewはすべてのManufacturerNamesで埋められ、1つをクリックすると、編集用のTextBoxが埋められます。
問題は、結果がツリービューで希望する順序になっていないことです。
私は次のようなことを望んでいました:

    Property tblManufacturers As Table(Of dbManufacturers) _
        = LinqDB.GetTable(Of dbManufacturers)().OrderBy("ManufacturerName") 

うまくいくでしょうが、残念ながら違います。

私は私が次のようなものを使うことができることを知っています

Dim ManufacturerQuery = From ManufacturerName In tblManufacturers Order By ManufacturerName 

しかし、変更をデータベースにプッシュバックするのはもっと難しいようです。

編集:だから、どうやら私は臆病になるのをやめて、ただ何かを試す必要があります...

Namespace Controls
    Public Class ManufacturerWarranty

        Private LinqDB As New DataContext(My.Settings.dbConnection)
        Property tblManufacturers As Table(Of dbManufacturers) = LinqDB.GetTable(Of dbManufacturers)()
        Property ManufacturerQuery = From m In tblManufacturers Order By m.ManufacturerName

        Public Sub New()
            InitializeComponent()
        End Sub

        Private Sub ManufacturerWarranty_Loaded(sender As Object, e As System.Windows.RoutedEventArgs) Handles Me.Loaded
            Me.DataContext = Me
        End Sub

        Private Sub TreeView1_MouseDoubleClick(sender As System.Object, e As System.Windows.Input.MouseButtonEventArgs) Handles TreeView1.MouseDoubleClick
            StackPanel1.DataContext = e.OriginalSource.DataContext
        End Sub


        Private Sub cmdSave_Click(sender As Object, e As System.Windows.RoutedEventArgs) Handles cmdSave.Click
            LinqDB.SubmitChanges()
        End Sub
    End Class
End Namespace

次に、TreeViewをtblManufacturersではなくManufacturerQueryにバインドします。[保存]ボタンは、tblManufacturersではなくManufacturerQueryに対して行われた場合でも、変更を送信するために引き続き機能します。

4

1 に答える 1

1

わかりました、おそらくあなたはしたい

Dim tblManufacturers As Table(Of dbManufacturers) _
    = LinqDB.GetTable(Of dbManufacturers)() _
        .OrderBy(Function(m) m.ManufacturerName)  

だから、コミットするにはあなたがするだろう

Using linqDB As New DataContext(My.Settings.dbConnection)
    Dim tblManufacturers As Table(Of dbManufacturers) _
        = linqDB.GetTable(Of dbManufacturers)()

    -- change tblManufacturers.

    linqDB.SaveChanges()
End Using

私がやらないことは、ユーザーがGUIを操作している間、コンテキストを開いたままにすることです。同様に、私は(おそらく)ユーザーにデータを表示しない限り、データを注文しませんでした。

于 2012-10-22T14:11:41.557 に答える