2015-07-28 3 views
0

В приведенном ниже кодировании я вставляю элементы в datagrid из combobox.Как вставить элементы в список

private void cmbAddExtras_SelectionChanged(object sender, SelectionChangedEventArgs e) 
{ 
    using (TruckServiceClient TSC = new TruckServiceClient()) 
    { 
     var item = cmbAddExtras.SelectedItem as ExtraDisplayItems; 

     if (item != null) 
     { 
      var displayItem = new List<ExtraDisplayItems> 
      { 
       new ExtraDisplayItems 
       {        
        ItemId = item.ItemId, 
        ItemCode = item.ItemCode, 
        ItemDescription = item.ItemDescription, 
        ItemSellingPrice = item.ItemSellingPrice, 
        displayItems = item.displayItems //Always null? 
       } 
      }; 
      dgAddExtras.Items.Add(item); 
     } 
    } 
    btnRemoveAllExtras.Visibility = Visibility.Visible; 
} 

Я создал переменную в классе ниже, где я хочу, чтобы иметь возможность доступа к элементам в другом методе и получить Sum всего моего ItemSellingPrice.

Мой класс:

public class ExtraDisplayItems 
{ 
    public List<ExtraDisplayItems> displayItems; 

    public int ItemId { get; set; }  
    public string ItemCode { get; set; }  
    public string ItemDescription { get; set; }  
    public double? ItemSellingPrice { get; set; } 
} 

Теперь мой вопрос заключается в том, что в верхнем способе, в котором я вставляя элементы в DataGrid, моя displayItems переменная всегда нулевой по какой-то причине. Есть ли какой-то особый способ, который мне нужно загрузить в список displayItems в моем классе?

+0

Вы пытались создать экземпляр displayItems? – Karthik

+0

@Turbulence - Спасибо за ответ! :) Как бы я это сделал? Можете ли вы показать мне пример, пожалуйста? – CareTaker22

+0

Здесь вы идете 'public ExtraDisplayItems() {this.displayItems = новый список ();}' – Karthik

ответ

2

Вам не нужно хранить всю коллекцию выбранных элементов для каждого элемента, добавляемого в DataGrid. Вы можете получить коллекцию из самого DataGrid, и вы можете сделать это, используя вычисляемое свойство, как это, например, (возможно, вам нужно добавить System.Linq к вашему usings):

private IEnumerable<ExtraDisplayItems> SelectedDisplayItems 
{ 
    get 
    { 
     return dgAddExtras.Items.Cast<ExtraDisplayItems>(); 
    } 
} 

Таким образом, вы можете удалить список из класса ExtraDisplayItems.

public class ExtraDisplayItems 
{ 
    public int ItemId { get; set; }  
    public string ItemCode { get; set; }  
    public string ItemDescription { get; set; }  
    public double? ItemSellingPrice { get; set; } 
} 

Ваш метод SelectionChanged бы в конечном итоге, как это:

private void cmbAddExtras_SelectionChanged(object sender, SelectionChangedEventArgs e) 
{ 
    // You're not using TSC, so you don't need this either 
    //using (TruckServiceClient TSC = new TruckServiceClient()) 
    //{ 
     var item = cmbAddExtras.SelectedItem as ExtraDisplayItems; 

     if (item != null) 
     { 
      dgAddExtras.Items.Add(item); 
     } 
    //} 
    btnRemoveAllExtras.Visibility = Visibility.Visible; 
} 

И в вашем другой метод, который необходимо вычислить сумму ItemSellingPrice, вам просто нужно использовать вычисляемое свойство.

private void YourOtherMethod() 
{ 
    // do stuff 

    var sum = SelectedDisplayItems.Sum(item => item.ItemSellingPrice ?? 0); // Since ItemSellingPrice can be null, use 0 instead 

    // do more stuff 
} 
+0

Hahaha woooow !!! Я так долго боролся с этой проблемой, и теперь вы дали мне ответ. Он отлично работает! Спасибо, что так много almulo !! : D Лучший ответ из всех вопросов, которые я должен был задать. – CareTaker22

+0

Рад, что я мог бы помочь :) – almulo

0

cmbAddExtras.SelectedItem не относится к типу ExtraDisplayItems. Это либо нулевой, либо другой тип

+0

Благодарим вас за ответ Glen, но это все равно дает значение 'displayItems' значения ** null **. – CareTaker22

+0

Тогда вы должны установить его значение в нуль в какой-то момент. –

Смежные вопросы