Как получить сумму выбранных значений DataGrid в приложении C # WPF? - PullRequest
0 голосов
/ 22 декабря 2018

У меня есть приложение C # WPF, и моя цель - получить сумму выбранных значений строк из DataGrid и установить текстовое поле с этим итогом.Это вычисление суммы инициируется событием, которое обнаруживает, когда выбранные элементы изменились.

DataGrid sum

Проблема заключается в том, что при выборе нескольких строк одновременно иливыберите все с помощью Ctrl + A, я получу непредсказуемое значение суммы.

Чтобы устранить неполадки, я связал сетку данных 100 строками, каждая из которых имеет количество 1. Затем я выбрал все элементы с помощью Ctrl + A. Общая сумма должна составлять 100, но она ограничена 7 или 8 единицами.

Sample DataGrid

Ниже приведено то, что я имею до сих пор.Кто-нибудь видит проблему?

private void DgDailyTransactions_SelectedCellsChanged(object sender, SelectedCellsChangedEventArgs e)
{
    decimal sum = 0;
    for (int i = 0; i < dgDailyTransactions.SelectedItems.Count; i++)
    {
        TextBlock tb = dgDailyTransactions.Columns[1].GetCellContent(dgDailyTransactions.SelectedItems[i]) as TextBlock;

        if (tb != null)
        {
            sum += Convert.ToDecimal(tb.Text);
        }
    }
    tbxSelectedDailyTransactionsTotal.Text = sum.ToString();
}

Ответы [ 2 ]

0 голосов
/ 22 декабря 2018

для метода sum вы можете сделать это с помощью linq (если вы не знаете, я настоятельно советую вам изучить linq, очень сильный инструмент в C #), также посоветует вам использовать MVVM, это сделает ваш код намного прощеотладка в будущем:

private void dgDailyTransactions_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        List<Sales> myList=dgDailyTransactions.SelectedItems.Cast<Sales>();
        decimal totalSum = 0;
        if (myList.Count() > 0)
        {
            totalSum = myList.Sum(item => item.Amount);
        }
        myTextBlock.Text = totalSum.ToString();
    }

в MVVM (если вы ее используете), вам понадобится только эта строка в Model:

private void dgDailyTransactions_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
             contexte.SelectedSales= new ObservableCollection<Sales>(dgDailyTransactions.SelectedItems.Cast<Affaire>());
        }

, тогда вы используете формулу в вашей ViewModel в разделе setSelectedSales

0 голосов
/ 22 декабря 2018

Предположим, ваш класс выглядит следующим образом:

 public class Sales
    {
       public int Order { get; set; }
        public decimal Amount { get; set; }
    }

Создайте простой метод, как показано ниже:

    private void FindAmount()
    {
        decimal totalSum = 0;
        //Add amounts of selected
        if (MyDTGRID.SelectedItems.Count > 0)
        {
            for (int i = 0; i <= dgDailyTransactions.SelectedItems.Count - 1; i++)
            {
                Sales sales = dgDailyTransactions.SelectedItems[i] as Sales;

                decimal amount = sales.Amount;
                totalSum += amount;
            }
        }
        myTextBlock.Text = totalSum.ToString();
    }

Просто вызовите метод в вашем selectedCellsChanged Событии

    private void DgDailyTransactions_SelectedCellsChanged(object sender, SelectedCellsChangedEventArgs e)
    {
        FindAmount();
    }

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...