2012-02-17 45 views
2

后给定的行索引我建立我与bindnig源数据网格:删除行排序C#

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

+1

与绑定源排序证明这一点,不排序的原始数据表它将它的一个副本分类。你最好使用数据键而不是行索引来删除。 – 2012-02-17 20:59:30

+0

@BrianDriscoll您能否详细解释如何使用数据键而不是行索引? – 2012-02-17 21:03:40

回答

2

为什么不使用绑定源 例如只是将其删除

bs.RemoveAt(0) 

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

BindingSource.Insert(int, object)或​​看起来不错,但在源是一个DataSet,不支持。

这是因为BindingSource.Insert只是调用底层列表上的System.Collections.IList.Insert()。底层列表是一个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 
+0

是否有类似的'test.Tables [0] .Rows.InsertAt(newRow,0);'? – 2012-02-17 21:31:21

+0

[BindingSouce.Insert](http://msdn.microsoft.com/en-us/library/system.windows.forms.bindingsource.insert.aspx)接受一个整数和一个对象,以便肯定的,但是我没有测试 – 2012-02-17 21:34:55

+0

它说外部对象不能添加到这个列表 – 2012-02-17 21:40:11

2

删除在绑定源不在数据集