【发布时间】:2013-05-08 16:50:33
【问题描述】:
我对 WPF/LINQ2Entities 比较陌生。我设法取得了进展,但我一直在研究一个问题:
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 未在网格底部显示新行以添加其他记录。
我相信它与 LINQ 查询有关,因为当我以这种方式填充 DataGrid 时:
QADBEntitiesViewSource = CType(Me.FindResource("QADBEntitiesViewSource"), CollectionViewSource)
QADBEntitiesViewSource.Source = context.SalesOrderListSQ.ToList()
....一切,包括新行,都可以正常工作。任何帮助或指示将不胜感激。再次,我对此很陌生,我意识到这可能是我整个设计的问题。谢谢。
【问题讨论】:
-
只是猜测:也许问题在于
CollectionViewSource是只读的。作为快速测试,我会尝试使用ObservableCollection或类似的源代码。