使用dataTable从dataGridView中删除行

时间:2011-03-16 22:10:40

标签: c# winforms datagridview

我正在尝试删除所有行以重新加载它们(我需要删除所有行)由于某种原因它不会从我的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中的项目与元素编号相关联,不会保持不变

5 个答案:

答案 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;

解决了大多数问题,因为您不必担心数据的绑定方式。