2011-08-01 10 views
0

私はSilverlight DataGridを使用して、注文する予定の商品の数を入力することができます。すでに人口が多いのは彼がそのアイテムのコストだからです。今私は、セルを編集したらそのヘッダーをチェックするイベントがありますが、その2つのセルをどのように掛け合わせて、コスト列のセルに値を配置するのですか?私は本当に私のDataGridにバインドされているオブジェクトのリストを変更するだろう知っているが、私はこれを行う方法を知らない。掛け算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.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(); 
    } 
} 

編集:あなたは総コストを表示するには、値コンバータを使用することができ、また

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

    // rest of your class 
} 

:たとえば、あなたのデータグリッドは、新しいにtotalCostプロパティを追加することができますのIListにバインドされていると仮定:コードを確認した後、ItemOrderオブジェクトにバインドされたデータグリッドに新しい列を追加し、それに値コンバーターをアタッチすることができます。

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

); 
+0

だから私はそのコードを追加して何もしません。私はLINQでDataGridを充填しているか、設定されたプロパティがないので、それは可能でしょうか? –

+0

DataGridを定義するXAMLを投稿できますか?また、コード内にDataGridを設定している場合は、そのコードを投稿することもできますか? – fsong

+0

私は自分のコードを追加しました。amに私のXamlを追加します。 –