2011-02-15 59 views
1

麻煩我遇到了將DataGrid的ItemsSource屬性設置爲LINQ查詢結果的問題。確切的錯誤是:延期評估和DataGrid.ItemsSource

無法訪問處置的對象。 對象名稱:'在Dispose之後訪問DataContext'。

現在,在您開始sn鼻涕,甩開關於延遲查詢評估和處置數據庫上下文的答案之前,請確定我明白了所有這些。我正在調用ToList()查詢的結果並將其分配給ItemsSource屬性。所以,查詢執行,結果讀入內存,應該沒問題。

是的,沒有那麼多。起初我認爲必須有一些關於屬性本身的原因,也就是我不知道的一些奇怪的數據綁定(目前學習WPF和linq2Sql)。在思考了一些後,我仍然無法解釋這個問題,因爲DataGrid不應該有DataContext的任何概念,只是列表(儘管從測試方法返回一個List並在稍後迭代它並沒有拋出異常)。

它是在被銷燬後被訪問的DataContext,但是這並不能幫助我理解,因爲我正在調用ToList()專門用來在using塊退出之前執行查詢。不過,我可以解決這個問題,如下圖所示:

private void button1_Click(object sender, RoutedEventArgs e) 
{ 
    using(NorthwindDataContext db = new NorthwindDataContext()) 
    { 
     db.DeferredLoadingEnabled = false; // works, but why is it necessary at all? 
     grid.ItemsSource = (from o in db.Orders 
          where o.CustomerID == "VINET" 
          select o).ToList(); 
    } 
} 

所以,是的,我想了解移動上走得太遠此行爲。提前致謝。

編輯:XAML的主窗口和DataGrid

<Window x:Class="WpfApplication1.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="MainWindow" Height="495" Width="722"> 
    <Grid> 
     <DataGrid AutoGenerateColumns="true" Height="403" HorizontalAlignment="Left" Margin="12,41,0,0" Name="grid" VerticalAlignment="Top" Width="676" /> 
     <Button Content="Do it" Height="23" HorizontalAlignment="Left" Margin="12,12,0,0" Name="button1" VerticalAlignment="Top" Width="75" Click="button1_Click" /> 
    </Grid> 
</Window> 

回答

0

你的代碼表示設置DeferredLoadingEnabled假固定的呢?如果是這樣,我會假設你的數據綁定正在訪問一個相關對象的屬性,當訪問它時,它試圖引發一個新的查詢來檢索所述對象。

+0

當數據綁定訪問相關對象上的屬性時(如引用了OrderType對象的訂單對象),惰性加載正在踢入,並且新查詢正在觸發 – 2011-02-15 05:00:29