2016-09-22 30 views
0

在我的WPF應用程序中,我有一個包含DataGrid的窗口(所有代碼)。有我的DataGrid綁定:如何獲取DataGrid單元格的字段

using (var db = new CompanyEntities()) 
{ 
    var stocks = db.Stock; 
    var query = from s in stocks 
       select new { s.Id_Product, s.Quantity }; 
    dataGrid.ItemsSource = query.ToList(); 
} 

我想要讀取在DataGrid中選擇的單元格。我試着用DataGrid.SelectedItem來讀取它,但是爲了得到這個項目,我必須將它轉換爲某種類型。我無法使用Stock類,因爲我的DataGrid單元格包含Stock的3個字段中的2個。所以我做了另一個類來表示DataGrid單元格:

class TableItem 
    { 
     public int Id_Product; 
     public int? Quantity; 
    } 

並試圖投它是這樣的:

TableItem x = (TableItem)dataGrid.SelectedItem; 

但我從類型得到InvalidCastException的:

'<> f__AnonymousType0 2[System.Int32,System.Nullable 1 [System.Int32]]'

到我的TableItem類型。

那麼我應該如何得到我的dataGrid的選定單元格?

我的外觀圖釋:

在我CompanyEntites構造我設置:

this.Configuration.ProxyCreationEnabled = false; 

,現在我可以施展Stock s = (Stock)dataGrid.SelectedItem;沒有例外,切換ProxyCreation關閉之前,我的SelectedItem是DynamicProxy.Stock ~~類型。

+0

添加斷點,使用觀察窗口。看看'dataGrid.SelectedItem'實際是什麼類型。把它投射到那。 –

+0

它的值是{Id_Product = 3,Quantity = 10} 和類型:\t <匿名類型> – Jacoslaw

+0

糟糕,應該已經看到了。 –

回答

2

更改您的查詢,像這樣:

var query = from s in stocks 
      select new TableItem { Id_Product = s.Id_Product, Quantity = s.Quantity }; 

再投SelectedItemTableItem,現在,它實際上是一個。在C#中,僅僅因爲它看起來像另一個類,並不意味着它那個其他類。

或者,不要僅僅因爲您不需要現有類的一個屬性而編寫新類。只需使用現有的類:

// Don't think you need to call ToList() here 
dataGrid.ItemsSource = db.Stock; 

...投下SelectedItem到不管它是什麼。

我的DataGrid單元格包含2出3股票的領域:

還等什麼?問題是你得到一個額外的列?明確定義列,只是你需要的列。

+0

我不想在每個表格中編寫新類,所以我定義了manualy的列。但是然後SelectedItem類型是DynamicProxies的成員。所以在我的實體環境中,我設置了Configuration.ProxyCreationEnabled = false。現在SelectedItem類型是股票,所以我可以使用它,因爲我想要的。 – Jacoslaw

相關問題