私は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に対して行われた場合でも、変更を送信するために引き続き機能します。