Как добавить значение каждой строки при повторении DataGrid? - PullRequest
1 голос
/ 04 августа 2020

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

private void Calendar_SelectedDatesChanged(object sender, SelectionChangedEventArgs e)
{
    var tb = sender as System.Windows.Controls.Calendar;
    CollectionViewSource addedFoodsViewSource = ((CollectionViewSource)(this.FindResource("addedFoodsViewSource")));

    if (tb == null)
    {
        fooddatabaseDataSet1.AddedFoodsDataTable dt = addedFoodsViewSource.Source as fooddatabaseDataSet1.AddedFoodsDataTable;
        dt.DefaultView.RowFilter = null;
        return;
    }
    else
    {
        string txt = tb.SelectedDate.ToString();

        fooddatabaseDataSet1.AddedFoodsDataTable dt = addedFoodsViewSource.Source as fooddatabaseDataSet1.AddedFoodsDataTable;
        dt.DefaultView.RowFilter = string.Format("AddedDate LIKE '%{0}%'", txt);
    }
    
    Int32 sum = 0;
    
    for (int i = 0; i < addedFoodsDataGrid.Items.Count - 1; i++)
    { 

    }
}

Ответы [ 2 ]

0 голосов
/ 04 августа 2020

Вы можете вычислить сумму каждого столбца, проходящего через все элементы и вызывающего GetCellContent метод для определенного столбца. Здесь я предполагаю, что у вас есть DataGridTextColumn для хранения ваших данных.

    private long GetColumnSum(DataGridColumn column)
    {
        long result = 0;
        foreach (ItemCollection item in addedFoodsDataGrid.Items)
        {
            result += int.Parse((column.GetCellContent(item) as TextBlock).Text);
        }
        return result;
    }
0 голосов
/ 04 августа 2020

Чтобы получить отфильтрованные данные, вы не используете сам DataGrid, вы используете базовый DataView. Вы можете перебирать само представление:

foreach (DataRowView rowView in dt.DefaultView)
{
    var row = rowView.Row as AddedFoodsDataRow;
    // Do something //
}

... или экспортировать его в таблицу:

var filteredData = dt.DefaultView.ToTable();

или, если вам нужен третий столбец:

var sum = filteredData.AsEnumerable().Sum(x=>x.Field<int>(3));

или, если вы хотите получить доступ к столбцу по имени

var sum = filteredData.AsEnumerable().Sum(x=>x.Field<int>("SomeProperty"));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...