Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 删除行然后将行添加到DataGridView时创建的重复行_C#_Winforms_Datagridview - Fatal编程技术网

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

C# 删除行然后将行添加到DataGridView时创建的重复行,c#,winforms,datagridview,C#,Winforms,Datagridview,让DataGridView正常工作时,我遇到了一个小问题。目前,我有一个DataSource来绑定我的数据(在本例中是对象的列表),并有以下方法将数据绑定到控件: private void Bind(List<CAMPDomainLayer.FeeDefinition> fees) { BindingSource bs = new BindingSource(fees, null); dgvFees.AutoGenerateColumns = false;

DataGridView
正常工作时,我遇到了一个小问题。目前,我有一个
DataSource
来绑定我的数据(在本例中是对象的
列表),并有以下方法将数据绑定到控件:

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;
}
这似乎很有效。
dgvFees.Rows.RemoveAt(索引)行从控件中删除行,从基础
列表中删除项。如果我尝试添加新行,问题就会出现。现在,我有一个刷新按钮,它从服务器获取一个列表,并使用上面的
Bind()
方法重新绑定。执行此操作的代码是:

Fees = fees;
Bind(Fees);
其中
费用
只是一个
列表
。当这个运行时,我删除了一行(现在有),一切正常。行被删除,而基础列表中没有任何内容。但当我尝试刷新(因此添加新行)时,我得到以下结果:

将复制第一行,并将其水平附加到第一行。stmpus me是正确的在重新绑定之前,我们可以看到
数据源只有一项:

即使绑定后,我也可以检查并看到该数据源中仍有1项:


所以我的问题是,如果
数据源中只有一项,为什么我可以看到重复的行。旧的
数据源
是否以某种方式“幻影”在其中?这是因为我的投标方法(无可否认,我对Winforms了解不多)造成的问题,还是框架中存在一些缺陷

您需要
dgvFees.Columns.Clear()Bind
方法处执行code>操作。看起来您正在添加列,但没有行…dgvFees.columns.Clear();然后是dgvFees.Columns.AddRange(新的DataGridViewColumn[]{colDesc,colAmount,colDelete});dgvFees.DataSource=bs;
Fees = fees;
Bind(Fees);