2014-02-21 31 views
0

我有這樣的DataGrid:C#WPF - 添加總排在DataGrid

enter image description here

我想在DataGrid的底部添加包含姓名的行:總量和價格:所有的總和價錢。如果有可能這一行將被凍結。 你有什麼想法嗎? 簡單的項目是在這個環節:here

編輯1 這是XAML代碼:

<DataGrid ItemsSource="{Binding Articles}" AutoGenerateColumns="False" HorizontalAlignment="Left" CanUserAddRows="False" IsReadOnly="True"> 
     <DataGrid.Columns> 
      <DataGridTextColumn Header="Name" Binding="{Binding Name}"/> 
      <DataGridTextColumn Header="Price" Binding="{Binding Price}" />    
     </DataGrid.Columns> 
    </DataGrid> 

,這是視圖模型:

[Export(typeof(IShell))] 
public class MainViewModel : Screen 
{ 
    public System.ComponentModel.ICollectionView Articles { get; set; } 

    public MainViewModel() 
    { 
     Articles = CollectionViewSource.GetDefaultView(GetArticles()); 
    } 


    private List<Article> GetArticles() 
    { 
     List<Article> arts = new List<Article>(); 

     arts.Add(new Article { Name = "Name1", Price = 2.80 }); 
     arts.Add(new Article { Name = "Name2", Price = 1.25 }); 
     arts.Add(new Article { Name = "Name3", Price = 9.32 }); 
     arts.Add(new Article { Name = "Name4", Price = 1.31 }); 
     arts.Add(new Article { Name = "Name5", Price = 0.80}); 
     arts.Add(new Article { Name = "Name6", Price = 2.50}); 
     arts.Add(new Article { Name = "Name7", Price = 0.50 }); 

     return arts; 
    } 

} 
+0

它的更好,如果你發佈簡化你的代碼版本代替了整個項目的鏈接 – ElectricRouge

+0

好的,我做到了。我更新的問題 – puti26

回答

1

多了一個:

private List<Article> GetArticles() 
    { 
     List<Article> arts = new List<Article>(); 

     arts.Add(new Article { Name = "Name1", Price = 2.80 }); 
     arts.Add(new Article { Name = "Name2", Price = 1.25 }); 
     arts.Add(new Article { Name = "Name3", Price = 9.32 }); 
     arts.Add(new Article { Name = "Name4", Price = 1.31 }); 
     arts.Add(new Article { Name = "Name5", Price = 0.80 }); 
     arts.Add(new Article { Name = "Name6", Price = 2.50 }); 
     arts.Add(new Article { Name = "Name7", Price = 0.50 }); 
     arts.Add(new Article { Name = "Total", Price = arts.Sum(l => l.Price)}); 
     return arts; 
    } 
+1

免費的最後一行,你創建DataGridRowStyle,添加setter一個ReadOnlyProperty綁定與源名稱屬性和IValueConverter:if Name ==「Total」return true else else false – PakKkO

+0

是一個很好的解決方案,但如果我在datagrid中有一個過濾器,文章「Total」將會丟失? – puti26

+0

是的,他確實在列名中禁用了訂單。在第一次,添加新的行與總和,不是一個好主意。我會在網格下兩個帶有這個值的文本塊。 – PakKkO

2

而不是增加一個最後的行添加到數據網格中,您可以在數據網格下面添加文本塊並將其綁定到具有總價格的屬性。

1

這應該是helpful.i只增加了一個新行的方法制作的總和

private List<Article> GetArticles() 
    { 
     List<Article> arts = new List<Article>(); 

     arts.Add(new Article { Name = "Name1", Price = 2.80 }); 
     arts.Add(new Article { Name = "Name2", Price = 1.25 }); 
     arts.Add(new Article { Name = "Name3", Price = 9.32 }); 
     arts.Add(new Article { Name = "Name4", Price = 1.31 }); 
     arts.Add(new Article { Name = "Name5", Price = 0.80 }); 
     arts.Add(new Article { Name = "Name6", Price = 2.50 }); 
     arts.Add(new Article { Name = "Name7", Price = 0.50 }); 
     arts.Add(new Article {Name = "Total", Price = GetTotal(arts)}); 
     return arts; 
    } 

    private double GetTotal(List<Article> arts) 
    { 
     double Total = 0; 
     foreach (Article art in arts) 
     { 
      Total += double.Parse(art.Price.ToString()); 
     } 
     return Total; 
    } 

問候