Повторяющиеся строки, созданные при удалении и последующем добавлении строк в DataGridView - PullRequest
0 голосов
/ 02 июля 2018

У меня небольшая проблема с настройкой DataGridView для правильной работы. В настоящее время у меня есть DataSource для привязки моих данных (в данном случае List<T> объектов) и следующий метод для привязки данных к элементу управления:

private void Bind(List<CAMPDomainLayer.FeeDefinition> fees)
{
    BindingSource bs = new BindingSource(fees, null);
    dgvFees.AutoGenerateColumns = false;

    var colDesc = new DataGridViewTextBoxColumn
    {
        HeaderText = "Description",
        DataPropertyName = "Description",
        ReadOnly = true,
        AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCellsExceptHeader
    };

    var colAmount = new DataGridViewTextBoxColumn
    {
        HeaderText = "Amount",
        DataPropertyName = "FeeAmount",
        ReadOnly = false,
    };

    var colDelete = new DataGridViewButtonColumn
    {
        HeaderText = string.Empty,
        Text = "Delete",
    };

    dgvFees.Columns.AddRange(new DataGridViewColumn[] { colDesc, colAmount, colDelete });
    dgvFees.DataSource = bs;
}

Обратите внимание, что я добавляю столбец кнопки для кнопки удаления, в настоящее время я обрабатываю это со следующим событием:

private void dgvFees_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
    if(dgvFees.Columns[e.ColumnIndex] is DataGridViewButtonColumn && e.RowIndex >= 0)
    {
        int index = e.RowIndex;

        dgvFees.Rows.RemoveAt(index);
        dgvFees.Refresh();

        CalculateTotal(Fees, PaymentAmount);
    }
}

Кажется, это работает нормально. Строка dgvFees.Rows.RemoveAt(index); удаляет строку из элемента управления и элемент из базового List<T>. Проблема возникает, если я пытаюсь добавить новую строку. Прямо сейчас у меня есть кнопка обновления, которая захватывает список с сервера и выполняет повторную привязку, используя вышеуказанный метод Bind(). Код для этого:

Fees = fees;
Bind(Fees);

Где Fees это просто List<T>. Когда это выполняется, и я удаляю строку (прямо сейчас), все работает отлично. Строка удаляется, и в нижележащем списке ничего нет. Но когда я пытаюсь обновить (следовательно, добавляя новые строки), я получаю это:

Duplicated row

Первый ряд шляпы дублируется и добавляется по горизонтали к первому ряду. То, что меня раздражает, правильное до того, как мы перепривязываем, мы видим, что DataSource имеет только один элемент:

Right before we bind, note that the DataSource on has one item in it

Даже после привязки я могу проверить и убедиться, что в этом источнике данных есть элемент 1 :

After we have rebound, I can still only see 1 item in that DataSource

Итак, мой вопрос: почему, если в DataSource есть только один элемент, я могу увидеть дублирующую строку. Старый DataSource как-то "фантомен" там? Является ли это проблемой из-за моего подхода к ожиданию (по общему признанию, я не знаю много о Winforms), или это какая-то ошибка в структуре?

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