2011-07-22 57 views
0

我有一个数据表,其defaultview.sort已经设置,并且数据表中填充了数据,我想要做的是向数据表添加一行,但是我需要这个行永远是第一排,与表的其余部分被normaly排序,这里是我的代码:插入一个项目到一个已经排序的数据表中

//Sort the datatable 
dt.DefaultView.Sort = "DisplayFiled"; 

//Add the fixed row 
DataRow dr = dt.NewRow(); 
dr["ValueField"] = String.Empty; 
dr["DisplayField"] = "All"; 
dt.Rows.InsertAt(dr, 0);` 

回答

1

您可以通过添加第二个栏完成这个排序上

DataTable dt = new DataTable(); 

dt.Columns.Add("UserAdded",typeof(bool)); 
dt.Columns.Add("DisplayField", typeof(int)); 

DataView vw = new DataView(dt); 
vw.Sort = "[UserAdded] desc, [DisplayField] asc"; 

当您添加设置UserAdded = true来迫使它显示了第一

​​
+0

其他答案都是如此,但是我发现这是最聪明的主意,谢谢 –

+0

@Hassan随后可以随时上传:) – cordialgerm

+0

:)你走 –

0

您可以通过throught排序表,记录复制到非排序表的第一个记录“所有”。

+0

难道不是一个排有没有更简单的方法?就像你迫使表只排序一次,并且所有添加的新记录都保存在它们的位置 –

0

创建另一个DataTable实例。在顶部添加所需的行,并将已排序表的行添加到新创建的数据表。

System.Data.DataTable dt = new System.Data.DataTable(); 
    // fill dt 
    System.Data.DataTable dtNew = new System.Data.DataTable(); 
    System.Data.DataRow dr = dtNew.NewRow(); 
    dr["ValueField"] = String.Empty; 
    dr["DisplayField"] = "All"; 
    dtNew.Rows.InsertAt(dr, 0); 
    foreach (var row in dt.Rows) 
    { 
     dtNew.Rows.Add(row); 
    } 
相关问题