2011-08-01 108 views
0

我有一个Silverlight数据网格,允许用户输入您计划订购的产品数量。已经填充的是他的物品成本。现在我有一个事件,一旦完成编辑后,单元格会检查该标题,但是如何将这两个单元格相乘并将该值放入成本列中的某个单元格中。我知道我真的会改变绑定到我的数据网格的对象列表,但我不知道如何做到这一点。乘法Silverlight Datagrid

client.GetOrderCompleted += (s, ea) => 
     { 
      dgOrder.AutoGenerateColumns = false; 
      //dgOrder.ColumnWidth.Value = 100; 





      dgOrder.Columns.Add(CreateTextColumn("SKU", "SKU")); 
      dgOrder.Columns.Add(CreateTextColumn("productname", "Product Name")); 
      dgOrder.Columns.Add(CreateTextColumn("itemnumber", "Item Number")); 
      dgOrder.Columns.Add(CreateTextColumn("cost", "Cost")); 
      dgOrder.Columns.Add(CreateTextColumn("asin", "ASIN")); 
      dgOrder.Columns.Add(CreateTextColumn("pendingorder", "Rank")); 
      dgOrder.Columns.Add(CreateTextColumn("rank", "Node")); 
      //dgOrder.Columns.Add(CreateTextColumn("w4", "AMZN")); 
      dgOrder.Columns.Add(CreateTextColumn("amazon", "AMZN")); 
      dgOrder.Columns.Add(CreateTextColumn("ourprice", "OurPrice")); 
      dgOrder.Columns.Add(CreateTextColumn("bbprice", "BuyBox")); 
      dgOrder.Columns.Add(CreateTextColumn("afner", "AFN")); 
      dgOrder.Columns.Add(CreateTextColumn("quantity", "INV")); 
      dgOrder.Columns.Add(CreateTextColumn("w4", "W4")); 
      dgOrder.Columns.Add(CreateTextColumn("w3", "W3")); 
      dgOrder.Columns.Add(CreateTextColumn("w2", "W2")); 
      dgOrder.Columns.Add(CreateTextColumn("w1", "W1")); 
      dgOrder.Columns.Add(CreateTextColumn("order", "Order")); 
      dgOrder.Columns.Add(CreateTextColumn("total", "Total")); 
      dgOrder.Columns.Add(CreateTextColumn("profit", "Profit")); 
      dgOrder.Columns.Add(CreateTextColumn("percent", "Percent")); 
      dgOrder.Columns.Add(CreateHyperlink("asin")); 
      dgOrder.ItemsSource = ea.Result; 
      Original = ea.Result; 

     }; 
    client.GetOrderAsync(txtBox.Text); 

XAML:

<sdk:DataGrid AutoGenerateColumns="True" 
     Height="469" 
     HorizontalAlignment="Left" 
     Margin="12,41,0,0" 
     Name="dgOrder" 
     VerticalAlignment="Top" 
     Width="1316" 
     HeadersVisibility="All" 
     CellEditEnded="dgOrder_CellEditEnded" 
     RowBackground="DodgerBlue" 
     AlternatingRowBackground="LightBlue" 
     LostFocus="TextBox_LostFocus" 
     BeginningEdit="dgOrder_BeginningEdit" 
     SelectionChanged="dgOrder_SelectionChanged" 
     LoadingRow="dgOrder_LoadingRow" /> 
+0

您可以更改绑定到您的数据网格的对象,以便所需的属性自动计算为成本*金额,然后它应该自动更新。 – Tsabo

回答

1

您可以修改绑定到DataGrid中的对象,包括总成本的特性。例如,假设你的DataGrid绑定到一个IList,你可以添加一个新的TOTALCOST属性:

public class ItemOrder 
{ 
    public double TotalCost 
    { 
     get 
     { 
      return this.OrderAmount * this.ItemCost; 
     } 
    } 

    // rest of your class 
} 

或者,你可以使用一个值转换器显示的总成本:

<DataGrid> 
    <DataGrid.Resources> 
     <TotalCostConverter x:Key="TotalCostConverter"/> 
    </DataGrid.Resources> 
    <DataGrid.Columns> 
     <DataGridTextColumn Header="Amount" Binding="{Binding OrderAmount}"/> 
     <DataGridTextColumn Header="ItemCost" Binding="{Binding ItemCost}"/> 
     <DataGridTextColumn Header="Total" Binding="{Binding Converter={StaticResource TotalCostConverter}"/> 
    </DataGrid.Columns> 
</DataGrid> 


//Converter 
public class TotalCostConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     var itemOrder = value as ItemOrder; 
     return itemOrder.OrderAmount * itemOrder.ItemCost; 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     throw new NotImplementedException(); 
    } 
} 

编辑:查看代码后,可以将新列添加到绑定到ItemOrder对象的数据网格中,并将值转换器附加到它。

dgOrder.Columns.Add(
    new DataGridTextColumn() 
    { 
     Header = "Total", 
     Binding = new Binding() 
     { 
      //The Value converter described above 
      Converter = new TotalCostConverter(),    
     } 
    }   

); 
+0

所以我添加了代码,它什么都不做。难道是因为我通过LINQ填充datagrid或者我没有set属性? –

+0

你可以发布定义你的数据网格的XAML吗?如果你在代码中设置DataGrid,你是否也可以发布该代码? – fsong

+0

我添加了我的代码,我将在上午添加我的Xaml。 –