在对c#排序后删除给定行索引的行

本文关键字:索引 删除 排序 在对 | 更新日期: 2023-09-27 18:24:56

我用bindnig源构建了我的数据网格:

    SqlDataAdapter adapter = new SqlDataAdapter(Datenbank.cmd);
    dataSet1.Tables.Clear();
    adapter.Fill(dataSet1, "Table");
    bs = new BindingSource();
    bs.DataSource = dataSet1.Tables["Table"];
    dataGridView1.DataSource = bs;

现在我对网格进行排序

    bs.Sort = "customer DESC";

现在我想删除第0行

    dataSet1.Tables[0].Rows.RemoveAt(0);

但是,排序前位于位置0的行将被删除,而不是现在位于位置0 的行

//编辑:test.Tables[0].Rows.InsertAt(newRow, 0);有类似的吗?

在对c#排序后删除给定行索引的行

为什么不使用绑定源删除它例如

  bs.RemoveAt(0)

关于test.Tables[0].Rows.InsertAt(newRow, 0);

BindingSource.Insert(int, object)BindingSource.List.Insert(int, object)看起来不错,但当源是数据集时不支持它。

这是因为BindingSource.Insert只调用基础列表上的System.Collections.IList.Insert()。基础列表是一个DataView。插入在Dataview上的实现是

private void System.Collections.IList.Insert(int index, object value)
{
    throw ExceptionBuilder.InsertExternalObject();
}

你可以通过显示

 System.Data.DataView dv = bs.List as DataView;
 System.Collections.IList list = dv;
 list.Insert(0,newRow); //BANG InsertExternalObject exception

在绑定源删除,而不是在数据集