2015-07-20 89 views
1

當我單擊組合框中的某個項目時(SelectionChanged事件),我需要將項目從我的ComboBox插入我的Datagrid將項目從ComboBox添加到Datagrid

我從一個WCF應用程序中的數據加載到下面的方法的組合框:

private async Task LoadItems(TruckServiceClient TSC, QuoteOptionType type, ComboBox combobox) 
{ 
    List<DisplayItems> displayItems = new List<DisplayItems>(); 
    foreach (var item in await TSC.GetQuoteOptionListAsync(type)) 
     displayItems.Add(new DisplayItems { Id = item.Key, Name = item.Value }); 
    combobox.ItemsSource = (displayItems.ToArray()); 
} 

,然後我排序的數據去哪裏我WindowLoaded事件:

private async void QuoteWindow_Loaded(object sender, RoutedEventArgs e) 
{ 
    using (TruckServiceClient TSC = new TruckServiceClient()) 
    { 
     await LoadItems(TSC, QuoteOptionType.BodyType, cmbBodyType); 
     await LoadItems(TSC, QuoteOptionType.Chassis, cmbChassisCab); 
     await LoadItems(TSC, QuoteOptionType.PaintColor, cmbPaint); 
     await LoadItems(TSC, QuoteOptionType.DropSide, cmbDropsideHeight); 
     await LoadItems(TSC, QuoteOptionType.Floor, cmbFloor); 
     await LoadItems(TSC, QuoteOptionType.RearDropSide, cmbRearDropsideHeight); 
     await LoadItems(TSC, QuoteOptionType.Extras, cmbAddExtras); 
    } 
} 

什麼我迫不及待地想知道如何顯示剛添加到datagrid中的項目(在組合框中)?

我試過了我在互聯網上找到的下列編碼,但我甚至不知道從哪裏開始將編碼從下面的代碼更改爲如何使用我目前的加載方式進入組合框。

Extras ex = (Extras)cmbAddExtras.SelectedItem; 
    List<Extra> items = new List<Extra> { E }; 

    items.Where(item => item != null).ToList().ForEach(i => 
    { 
     dgAddExtras.Items.Add(i); 
    }); 

回答

2

訂閱SelectiongChanged事件,無論是在XAML上還是在Loaded方法上。然後在事件處理程序只檢索所選擇的項目,並將其添加到DataGrid:

private async void QuoteWindow_Loaded(object sender, RoutedEventArgs e) 
{ 
    using (TruckServiceClient TSC = new TruckServiceClient()) 
    { 
     await LoadItems(TSC, QuoteOptionType.BodyType, cmbBodyType); 
     await LoadItems(TSC, QuoteOptionType.Chassis, cmbChassisCab); 
     await LoadItems(TSC, QuoteOptionType.PaintColor, cmbPaint); 
     await LoadItems(TSC, QuoteOptionType.DropSide, cmbDropsideHeight); 
     await LoadItems(TSC, QuoteOptionType.Floor, cmbFloor); 
     await LoadItems(TSC, QuoteOptionType.RearDropSide, cmbRearDropsideHeight); 
     await LoadItems(TSC, QuoteOptionType.Extras, cmbAddExtras); 
    } 

    combAddExtras.SelectionChanged += cmbAddExtras_SelectionChanged; 
} 

private void cmbAddExtras_SelectionChanged(object sender, SelectionChangedEventArgs e) 
{ 
    var item = cmbAddExtras.SelectedItem; 

    if (item != null) 
     dgAddExtras.Items.Add(item); 
} 

編輯 - 如果你想從下拉列表中刪除項目:

private void cmbAddExtras_SelectionChanged(object sender, SelectionChangedEventArgs e) 
{ 
    var item = cmbAddExtras.SelectedItem; 

    if (item != null) 
    { 
     dgAddExtras.Items.Add(item); 
     cmbAddExtras.Remove(item); 
    } 
} 

如果你不不想將它從組合中刪除,但要檢查它是否已經在DataGrid中:

private void cmbAddExtras_SelectionChanged(object sender, SelectionChangedEventArgs e) 
{ 
    var item = cmbAddExtras.SelectedItem; 

    if (item != null && !dgAddExtras.Items.Contains(item)) 
     dgAddExtras.Items.Add(item); 
} 
+0

感謝您的評論! :)我給出的編碼的最後一個例子不包含任何我使用的真實類。我正在努力獲得一種將QuoteWindow_Loaded方法中的項目添加到數據網格的工作方法。這裏的一行:'等待LoadItems(TSC,QuoteOptionType.Extras,cmbAddExtras);'是我將項目添加到組合框的位置 – CareTaker22

+0

您無法將項目從'QuoteWindow_Loaded'方法添加到DataGrid,因爲您希望它們只有當用戶從組合中選擇它們時才被添加。這不正確嗎?要獲得這種行爲,您只需訂閱Combo的'SelectionChanged'事件並將我的代碼複製到事件處理程序。如果'SelectedItem'屬性沒有返回'Extras'對象,那麼只需使用'object'即可。不過,你將不得不在後面處理如何在DataGrid中顯示數據,所以你最好知道你正在處理哪些類。 – almulo

+0

已編輯。如果不知道「Loaditems」方法的作用,不知道你正在使用的類,而沒有看到你的XAML,這是我能做的最好的。也許你可以解釋你爲什麼掙扎,你遇到什麼問題? – almulo

相關問題