2015-07-10 92 views
4

我已經在網絡上查找了這一點,而且我沒有發現任何東西似乎有所幫助。使用實體框架將數據綁定到WPF中的數據網格

我做了一個模型,並將模型作爲對象添加到數據源。我認爲它可以像數據集一樣工作,我可以拖放到表單上,它會爲我綁定數據。但是當我從模型中拖放時它會一直顯示爲空白。所以我在網上看,看到一些代碼隱藏是必需的,這是我的,它仍然是空白。任何想法我做錯了什麼?

public partial class form1: Window 

{ 
    ComEntities context;; 
    public form1() 
    { 
     InitializeComponent(); 

    } 

    private void Window_Loaded(object sender, RoutedEventArgs e) 
    { 
     context = new ComEntities(); 

     System.Windows.Data.CollectionViewSource comEntitiesViewSource = ((System.Windows.Data.CollectionViewSource)(this.FindResource("comEntitiesViewSource"))); 


     var permits = (from c in context.tBLPER.Local select c); 

     this.DataContext = context.tBLPER.Local; 
     tBLPERDataGrid.ItemsSource = context.tBLPER.Local; 

    } 


} 

XAML:

<DataGrid x:Name="tBLPERDataGrid" RowDetailsVisibilityMode="VisibleWhenSelected" Margin="10,10,10,413" ItemsSource="{Binding}" EnableRowVirtualization="True" AutoGenerateColumns="False"> 

    </DataGrid> 

回答

3

您需要實現您的查詢(將數據帶入內存)。你可以在調用ToList()方法,但更重要的是做到這一點:

context.TBLPER.Load(); 
this.DataContext = context.TBLPER.Local; // set the Window DataContext property 

Local屬性獲取一個ObservableCollection<T>表示在這個組中的所有AddedUnchangedModified實體的本地視圖。隨着實體從上下文中添加或刪除,此本地視圖將保持同步。同樣,添加到本地視圖或從本地視圖刪除的實體將自動添加到上下文或從上下文中刪除。

如果你需要之前過濾數據(假設你的實體有一個名爲Age財產,並希望20歲以上的用戶),那麼你可以這樣做:

context.TBLPER.Where(t=>t.Age>20).Load(); 
this.DataContext = context.TBLPER.Local; 

另一件事,如果你想設置你的網格的ItemSource財產在你的窗口後面的代碼,它沒有任何意義創建一個綁定到你的XAML代碼屬性,因此將其刪除:

<DataGrid ... ItemsSource="{Binding}" ...> 

如果你打算怎麼辦這個:

tBLPERDataGrid.ItemsSource=context.TBLPER.Local; 
+0

感謝您的信息,有點困惑我應該在哪裏添加代碼來實現查詢。我嘗試在window_Loaded和公共Form1()下,當我輸入CEntities來加載表時,我給出的唯一選項是Equals和ReferenceEquals。 – Gisiota

+0

對不起,我有一個拼寫錯誤,我編輯了我的答案 – octavioccl

+0

不用擔心,謝謝你的幫助。我感到很蠢,數據網格現在顯示了字段類型(例如日期選擇器和文本框,在它們全部空白之前),但數據仍然不存在。我認爲這與我的查詢有關,我從來沒有在任何地方使用變量許可,也不知道如何使用context.tblper.local方法綁定它。我更新了我目前擁有的window_loaded代碼。 – Gisiota

0

如果設置的AutoGenerateColumns = 「假」,你應該提供有關XAML列定義或設置的AutoGenerateColumns = 「真」。這是第一件要做的事情。

1

你不應該設置ItemsSource兩次(只需在你的代碼後面設置 - 刪除ItemsSource="{Binding}")。

此外,你應該設置AutoGenerateColumns="True",因爲沒有你需要DataGrid X Column元素添加到DataGrid

看看這裏瞭解更多詳情... http://www.wpf-tutorial.com/datagrid-control/custom-columns/

你也可以把一個斷點在tBLPERDataGrid.ItemsSource = permits;行,以便您可以檢查permits以確認它包含了所需的數據。

0

如果你想使用模型(也是ItemsSource="{Binding}"是我的一個提示,你想要的),比不要硬編碼的ItemsSource。您在CEntities context;變量創建模型的對象,但你應該把它設置爲窗口這樣的DataContext屬性:

DataContext = new CEntities(); 

和刪除行

tBLPERDataGrid.ItemsSource = permits; 

現在的ItemsSource從未來CEntities實例。

相關問題