我正在尝试删除所有行以重新加载它们(我需要删除所有行)由于某种原因它不会从我的datagridview中删除它们(因为它没有添加任何额外的)也没有发生任何事情。我尝试了很多不同的方法,我知道我过去已经这样做了。 (也许是因为它结束了一天)
这是我的代码尝试了一大堆删除
private void loadMSXGridView()
{
BindingSource bs = new BindingSource();
dgv.DataSource = null;
dgv.Refresh();
bs.DataSource = GetTable();
dgv.DataSource = bs;
dgv.Columns[0].Width = 391;
dgv.Columns[1].Width = 30;
}
private DataTable GetTable()
{
DataTable t = new DataTable();
t.Rows.Clear();
t.AcceptChanges();
t.Columns.Add("Accounting Line", typeof(string));
t.Columns.Add("#", typeof(string));
foreach (AMAPnr.RemarkElement re in AMAPnr._RemarkElements)
{
if (re.ElementID == "RM" && re.FreeFlow.StartsWith("*MS"))
{
DataGridViewCell gridCellText;
DataGridViewCell gridCellElement;
gridCellText = new DataGridViewTextBoxCell();
gridCellText.Value = re.FreeFlow;
gridCellElement = new DataGridViewTextBoxCell();
gridCellElement.Value = re.ElementNo.ToString();
t.Rows.Add(gridCellText.Value, gridCellElement.Value);
}
}
return t;
}
我的删除按钮调用loadMSXGridView,我只需刷新所有内容,因为我的datagridview中的项目与元素编号相关联,不会保持不变
答案 0 :(得分:1)
最初,您是数据绑定:
dgv.DataSource = GetTable();
然后你应该继续数据绑定;告诉表清除自身(并重新填充数据),或者只是将不同的数据表分配给dgv.DataSource
。
答案 1 :(得分:1)
在我有限的数据绑定体验中,编辑数据源并不容易。您应该使用行绑定或其他事件之一处理数据编辑。但是,如果要编辑数据源,则基本上必须克隆结构,然后导入行。所以从这个意义上讲,你应该回到你的数据源并准确选择你想要的东西。
然而..
如果您想过滤/编辑您的数据,请按以下步骤操作:
DataSet ds1 = [Your Data Source]
DataSet ds2 = new DataSet();
ds2 = ds1.Clone();
for (int i = 0; i < ds1.Tables[0].Rows.Count; i++)
{
if (ds1.Tables[0].Rows[i].ItemArray[0].ToString() != "SomeValue")
{
ds2.Tables[0].ImportRow(ds1.Tables[0].Rows[i]);
}
}
ds1 = ds2;
答案 2 :(得分:1)
如果您只想添加不同的数据表作为数据源,请执行以下操作:
datagridview.DataSource = datatable;
datagridview.Invalidate();
这应该有效,因为我刚刚对我正在进行的项目做了同样的事情:)
答案 3 :(得分:0)
我的错,运行了一个彻底的调试后我发现一切正常 备注元素没有被删除,因此通过添加相同的项目来删除它。我从RemarkElement部分删除了它的工作,感谢大家的帮助!
答案 4 :(得分:0)
我建议将DataGridView的DataSource设置为BindingSource,改为改变BindingSource的DataSource:
var table1 = GetDataTable();
var bindingSource1 = new BindingSource(table1, null);
dataGridView1.DataSource = bindingSource1;
// after reload
var table2 = GetDataTable();
bindingSource1.DataSource = table2;
解决了大多数问题,因为您不必担心数据的绑定方式。