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);