Разделите / выделите определенную сумму равномерно в соответствии с другими 4 заданными суммами в datagridview — C#

#c#

#c#

Вопрос:

Просто нужна небольшая помощь. Я хочу разделить / выделить определенное значение в соответствии с другими 4 заданными значениями в datagridview, но как мне это сделать?

Пример:

Допустим, у меня 3500

Тогда в представлении таблицы данных значения будут

 | ----- | -------------- |
| 0     |                |
| 3000  |                |
| 1000  |                |
| 1000  |                |
  

Что я пытаюсь получить: если значение на другом равно 0, оно пропускает его или значение равно 0.

 | ----- | -------------- |
| 0     |      0         |
| 3000  |      3000      |
| 1000  |      500       |
| 1000  |      0         |
  

Спасибо 🙂

Комментарии:

1. Вам нужен код SQL или C #?

2. В вашем сообщении выше, пожалуйста, укажите некоторые входные переменные и стиль кодирования, который вам требуется. Например, int[] {0, 3000, 1000, 1000} , и for-loop .

3. Можно ли это сделать в любом порядке? т. Е. являются ли 3000/3000, 1000/500 и 1000/1000, 1000/1000, 3000/1500 приемлемыми решениями?

4. Кроме того, это для winforms datagridview? Или WPF?

5. Под «разделить» вы подразумеваете «вычесть»? Под «пропустить» 0 вы имеете в виду «вычесть 0 «? Под неназванным столбцом значений вы подразумеваете «Начать со значения N , например 3500 , и столбца значений V . Для каждой строки в V : если V <= N затем вычесть V из N и скопировать V в новый столбец, иначе поместить N (он же «остаток») в новый столбец и установить N равным нулю?

Ответ №1:

Учитывая

Что у нас есть модель, определенная как:

 public class Model
{
    public decimal Amount { get; set; }
    public decimal Applied { get; set; }
    public Model(decimal amount, decimal applied) 
    {
        Amount = amount;
        Applied = applied;
    }
}
  

Которые мы привязываем к нашему DataGridView через BindingList , вы должны иметь возможность использовать следующее:

 decimal total = 3500M;

foreach (Model model in models)
{
    if (model.Amount < total)
    {
        model.Applied = model.Amount;
        total -= model.Amount;
    }
    else
    {
        model.Applied = total;
        total = 0;
    }
}
  

Полный пример (используя WinForms, нечто подобное может быть достигнуто в WPF)

 public class Model
{
    public decimal Amount { get; set; }
    public decimal Applied { get; set; }
    public Model(decimal amount, decimal applied) 
    {
        Amount = amount;
        Applied = applied;
    }
}

public partial class MainForm : Form
{
    private readonly BindingList<Model> models = new BindingList<Model>();

    public MainForm()
    {
        InitializeComponent();
        models.Add(new Model(0, 0));
        models.Add(new Model(3000, 0));
        models.Add(new Model(1000, 0));
        models.Add(new Model(1000, 0));
        Calculate();
        MyDataGridView.DataSource = models;
    }

    private void Calculate()
    {
        decimal total = 3500M;

        foreach (Model model in models)
        {
            if (model.Amount < total)
            {
                model.Applied = model.Amount;
                total -= model.Amount;
            }
            else
            {
                model.Applied = total;
                total = 0;
            }
        }
    }
}