2013-08-29 18 views
0

我想從DataGrid的wpf中的選定項目中獲取行的特定列。WPF:從選定的行中獲取列名

DataGrid的名稱是Datagrid_Newsale

當它被選中時,我得到整行的警報,所以我試圖映射它的列。

說,如果行是 -

{ ID = 3, CustomerName = xyz, SaleDate = 05.08.2013 00:00:00, TotalAmount = 10 } 

然後,它的列CustomerName=xyz在文本框中顯示。

獲取行向

var copyitem = Datagrid_NewSale.SelectedItem; 

if (copyitem == null) 
{ 
    MessageBox.Show("Please select values from list"); 
} 
if (copyitem != null) 
{      
    MessageBox.Show(copyitem.ToString()); 
} 

爲了得到客戶名稱到文本框,我試圖從數據庫中客戶創建基於模型

public class CustomerDetailes 
{ 
    public string CustomerName { get; set; } 
} 

和值的新實例表-1

public void viewcustomername() 
{ 
    List<CustomerDetailes> ilist = null; 
    ilist = (from order in db.Customer 
       select new CustomerDetailes 
       { 
        CustomerName= order.CustomerName 
       }).ToList(); 
    txtCustumer.Text = ilist.ToString(); 

} 

所以給它一個嘗試 -

CustomerDetailes copyitem = (CustomerDetailes)Datagrid_NewSale.SelectedItem; 

if (copyitem == null) 
{ 
    MessageBox.Show("Please select values from list"); 
} 
if (copyitem != null) 
{      
    MessageBox.Show(copyitem.ToString()); 
} 

txtCustomer.text=copyitem.CustomerName; //CustomerName into a textbox 

但它在copyitem中引用null。

我如何從整行獲得特定的列。

+0

@nit,是得到整行,因爲它是有問題的描述。 – Manoj

+0

@nit,No ..,首先嚐試不使用模型'CustomerDetails';它顯示全行。但是,當我使用模型,然後它是空的。 – Manoj

+0

對不起,我不明白。您是否將DataGrid的itemsSource設置爲CustomerDetails集合? – Nitin

回答

0

我想出了這個簡單的解決方案。

映射數據類型copyitem這是匿名的在我的情況。在這種情況下,使用Dynamic數據類型解決了我的問題。

由於我的數據是動態的,然後我試圖繪製出特定的列,所以它不是真的可以靜態執行,因爲那裏沒有數據。

使用動態Datatype-

dynamic copyitem = dataGrid1.SelectedItem; 

訪問性財產

int localId = copyitem.ID; 

而且,對於客戶名稱,總金額跟我一樣。

LINQ查詢changes-

var query= (from order in db.Customer 
where order.ID=localId 
select order).ToList(); 

DataGrid_OpenSale.ItemsSource=query //數據返回到另一個數據網格。

0

您必須將DataGrid的ItemsSource綁定到CustomerDetails集合才能獲取SelectedItem中的CustomDetails。

在你的視圖模型創建屬性(如果使用MVVM),或在後面的代碼一樣

List<CustomerDetails> customerDetails = new List<CustomerDetails>(); 
    List<CustomerDetails> MyCollection 
    { 
     get 
     { 

      return myList; 
     } 
     set 
     { 
      myList = value; 
      PropertyChanged(this, new PropertyChangedEventArgs("MyCollection")); 
     } 
    } 

,並在XAML只是做。

<DataGrid ItemsSource="{Binding MyCollection}"/> 

或者如果你是直接填充DataGrid中的項目添加爲CustomerDetails的情況下,像

dataGrid.Items.Add(new CustomerDetails(){Name = "abc"}, xyz propertis) 

感謝

+0

可以提供更多信息嗎? – Manoj

0

如果你可以從你的評選活動進入電網,然後下面應該給你列 ((DataGrid)sender).CurrentCell.Column.Header

並使用一些映射爲列名稱的對象的屬性你想要顯示

相關問題