0

私は比較的 WPF/LINQ2Entities に慣れていません。私はなんとか進歩を遂げましたが、私が研究してきた1つの問題に行き詰まっています:

1) この CollectionViewSource に基づいて設定された WPF DataGrid があります。CollectionViewSource のソースは LINQ クエリです。

    Private context As New QADBEntities        
    Dim QADBEntitiesViewSource As CollectionViewSource

    Dim SalesOrderSerialNumber_Query = From salesOrders In context.tblSalesOrders
                           Join serialNumbers In context.tblSerialNumbers
                           On salesOrders.Sales_Order_ID Equals serialNumbers.Sales_Order_ID
                           Where salesOrders.Sales_Order_ID = 5
                           Select New With {salesOrders, serialNumbers}


    QADBEntitiesViewSource = CType(Me.FindResource("QADBEntitiesViewSource"), CollectionViewSource)
    QADBEntitiesViewSource.Source = SalesOrderSerialNumber_Query.ToList()

以下は、DataGrid の XAML からの抜粋です。

            <DataGrid x:Name="TblSerialNumbersDataGrid" AutoGenerateColumns="False" EnableRowVirtualization="True" CanUserAddRows="True"
              ItemsSource="{Binding Source={StaticResource QADBEntitiesViewSource}}" Margin="293,44,10,16" 
              RowDetailsVisibilityMode="VisibleWhenSelected" Grid.ColumnSpan="2">
              <DataGrid.Columns>
                  <DataGridTextColumn x:Name="Kit_Group_IDColumn" Binding="{Binding serialNumbers.Kit_Group_ID}" Header="Kit Group ID" Width="SizeToHeader"/>
                  <DataGridTextColumn x:Name="NotesColumn" Binding="{Binding serialNumbers.Notes}" Header="Notes" Width="SizeToHeader"/>
                  <DataGridTextColumn x:Name="Product_IDColumn" Binding="{Binding serialNumbers.Product_ID}" Header="Product ID" Width="SizeToHeader"/>
                  <DataGridTextColumn x:Name="Production_Lead_IDColumn" Binding="{Binding serialNumbers.Production_Lead_ID}" Header="Production Lead ID" Width="SizeToHeader"/>
                  <DataGridTextColumn x:Name="QA_Personnel_IDColumn" Binding="{Binding serialNumbers.QA_Personnel_ID}" Header="QA Personnel ID" Width="SizeToHeader"/>
                  <DataGridTextColumn x:Name="Sales_Order_IDColumn" Binding="{Binding serialNumbers.Sales_Order_ID}" Header="Sales Order ID" Width="SizeToHeader"/>
                ....etc
              </DataGrid.Columns>
    </DataGrid>

2) 問題: DataGrid にデータを入力し、データを変更しても問題なく動作します。ただし、DataGrid は、グリッドの下部にレコードを追加するための新しい行を表示していません

この方法で DataGrid にデータを入力すると、LINQ クエリと関係があると思います。

            QADBEntitiesViewSource = CType(Me.FindResource("QADBEntitiesViewSource"), CollectionViewSource)
            QADBEntitiesViewSource.Source = context.SalesOrderListSQ.ToList()

....新しい行を含むすべてが機能しています。どんな助けや指針も大歓迎です。繰り返しますが、私はこれにかなり慣れていないため、設計全体に問題がある可能性があることに気付きました. ありがとう。

4

2 に答える 2

0

Linq クエリの結果は読み取り専用です。項目をデータ ソースに追加できるようにするにSourceは、結果を列挙する独自のクラス ( IEnumerable) と、データ ソースを操作するメソッド ( ) を提供する必要がある場合がありますIList

于 2013-05-08T17:31:19.060 に答える