删除然后将行添加到DataGridView时创建的重复行

时间:2018-07-02 19:19:25

标签: c# winforms datagridview

我在让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

帽子的第一行是重复的,并水平附加到第一行。重新绑定之前,对我的st憬是正确的,我们可以看到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不太了解)引起的问题,还是这是框架中的某个错误?

0 个答案:

没有答案