2012-09-15 2 views
-2

안녕하세요 "추가"버튼을 사용하여 행을 추가 할 수있는 observablecollection이 있습니다. 또한 사용자는 동일한 머리글 내에서 동일한 이름의 항목을 그룹화 할 수 있습니다. 데이터 뒤에WPF의 그룹 합계

코드 : 여기에 코드입니다

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.ComponentModel; 
using System.Collections.ObjectModel; 
namespace WpfDataGridWithDataTable 
{ 
    public class Article 
    { 
     public Article() 
     { 

     } 
     private int _modelNumber; 
     public int ModelNumber 
     { 
      get { return _modelNumber; } 
      set { _modelNumber = value; OnPropertyChanged("ModelNumber"); } 
     } 

     private string _modelName; 
     public string ModelName 
     { 
      get { return _modelName; } 
      set { _modelName = value; OnPropertyChanged("ModelName"); } 
     } 

     private decimal _unitCost; 
     public decimal UnitCost 
     { 
      get { return _unitCost; } 
      set { _unitCost = value; OnPropertyChanged("UnitCost"); } 
     } 

     private string _description ; 
     public string Description 
     { 
      get { return _description; } 
      set { _description = value; OnPropertyChanged("Description"); } 
     } 


     #region INotifyPropertyChanged Membres 

     public event PropertyChangedEventHandler PropertyChanged; 
     private void OnPropertyChanged(string propName) 
     { 
      if (PropertyChanged != null) 
      { 
       PropertyChanged(this, new PropertyChangedEventArgs(propName)); 
      } 
     } 
     #endregion 
    } 
    public class ListArticles : ObservableCollection<Article > 
    { 
     public Article a; 
     public ListArticles() 
     { 

       a = new Article(); 
       this.Add(a); 

     } 

    } 

} 

XAML 코드 :

namespace WpfDataGridWithDataTable 
{ 

    public partial class Window1 : Window 
    { 
     private ListArticles myList; 
     public Window1() 
     { 
      InitializeComponent(); 
      myList = new ListArticles(); 


      this.DataContext = myList; 

     } 

     private void btnAdd_Click(object sender, RoutedEventArgs e) 
     { 
      myList.Add(new Article()); 
     } 

     private void btnDelete_Click(object sender, RoutedEventArgs e) 
     { 
      myList.Remove(this.dataGrid1.SelectedItem as Article); 
     } 

    } 
} 

내가 열을 추가하려면 :

<Window x:Class="WpfDataGridWithDataTable.Window1" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:local="clr-namespace:WpfDataGridWithDataTable" 
     Title="Window1" Height="300" Width="300"> 
    <Grid 
     Name="gridPanel"> 
     <Grid.RowDefinitions> 
      <RowDefinition Height="*"></RowDefinition> 
      <RowDefinition Height="40"></RowDefinition> 
     </Grid.RowDefinitions> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="*"></ColumnDefinition> 
      <ColumnDefinition Width="*"></ColumnDefinition> 
     </Grid.ColumnDefinitions> 
     <DataGrid 
      Grid.Column="0" 
      Name="dataGrid1" 
      AutoGenerateColumns="True" 
      CanUserAddRows="True" 
      CanUserDeleteRows="True" 
      CanUserResizeColumns="True" 
      IsSynchronizedWithCurrentItem="True" 
      ItemsSource="{Binding}"/> 
     <ListBox 
      Grid.Column="1" 
      Name="listBox1" 
      IsSynchronizedWithCurrentItem="True" 
      ItemsSource="{Binding}"> 
      <ListBox.ItemTemplate> 
       <DataTemplate DataType="{x:Type local:Article}"> 
        <StackPanel  
         Orientation="Horizontal"> 
         <TextBlock 
          Width="100" 
          Margin="10" 
          Background="DarkBlue" 
          Foreground="White" 
          FontSize="14" 
          Text="{Binding ModelNumber}"/> 
         <TextBlock 
          Width="100" 
          Margin="10" 
          Background="DarkBlue" 
          Foreground="White" 
          FontSize="14" 
          Text="{Binding ModelName}"/> 
        </StackPanel> 
       </DataTemplate> 
      </ListBox.ItemTemplate> 
     </ListBox> 
      <Button 
       Grid.Row="1" 
       Grid.Column="0" 
       HorizontalAlignment="Left" 
       Width="100" 
       Name="btnAdd" 
       Content="Add Item" 
       Click="btnAdd_Click"> 
      </Button> 
      <Button 
       Grid.Row="1" 
       Grid.Column="1" 
       HorizontalAlignment="Right" 
       Width="100" 
       Name="btnDelete" 
       Content="Delete Item" 
       Click="btnDelete_Click" > 
      </Button> 
    </Grid> 
</Window> 

양식 뒤에 코드 그룹에 추가 된 각 기사의 수량을 저장하는 "Quantity (수량)". 제 질문은 이것입니다 : 각 그룹의 합계를 어떻게 얻을 수 있습니까?

+0

자세한 내용은 * sum *의 값은 어떤 의미도 아닙니다. – S3ddi9

+0

관련 코드를이 질문에 복사하십시오 (다른 질문에 어떤 문제가 발생할 경우를 대비하여) –

+2

이것은 실제 질문이 아닙니다. 그것은 아주 좋은 질문이 아닐 수도 있지만, 확실하게 합리적으로 대답하기에 충분합니다. – mydogisbox

답변

1

Linq를 사용하면 문제를 해결할 수 있습니다. (아래 코드에 오류가있을 수 있습니다. 컴파일러를 통해 전달하지 않았습니다.)

var groupSumsQuery = from model in myList 
        group model by model.ModelName into modelGroup 
        select new 
         { 
          Name = modelGroup.Key, 
          Sum = modelGroup.Sum(model=>model.UnitCost) 
         }; 

foreach(var group in groupSumsQuery) 
{ 
    Console.WriteLine("Total price for all {0}: {1}", group.Name, group.Sum); 
} 
+0

정확히 동일한 코드, 내 대답을 삭제하고 코드는 작동합니다. – S3ddi9

+1

@ SéddikLaraba - 편집을 수락했지만 약간의 변경이있었습니다. 'dataGrid1.ItemsSource'는'IEnumerable

'이 아니므로 myList 원래 코드에서. –

+0

@Erno Erno, 코드가 완벽하게 작동합니다. – valid90