Умножение Silverlight Datagrid - PullRequest
       29

Умножение Silverlight Datagrid

0 голосов
/ 01 августа 2011

У меня есть сетка данных Silverlight, позволяющая пользователю использовать количество продукта, который вы планируете заказать.Уже заселена стоимость предмета.Прямо сейчас у меня есть событие, которое, как только вы заканчиваете редактирование ячейки, проверяет этот заголовок, но как мне умножить эти две ячейки и поместить значение в ячейку в столбце стоимости.Я знаю, что действительно изменил бы Список объектов, связанных с моей сеткой данных, но я не знаю, как это сделать.

 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" />

1 Ответ

1 голос
/ 01 августа 2011

Вы можете изменить объект, связанный с вашей сеткой данных, и включить свойство в общую стоимость.Например, предполагая, что ваша 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(),             
        }
    }        

);
...