将项插入已排序的数据表中
本文关键字:数据表 排序 插入 | 更新日期: 2023-09-27 18:03:12
我有一个数据表,它的defaultview。排序已经设置,数据表充满了数据,我要做的是添加一行到数据表,但我需要这一行始终是第一行,表的其余部分正常排序,这是我的代码:
//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);`
您可以通过添加第二列来对
进行排序来实现这一点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来强制它先显示
var manualRow = dt.Rows.NewRow();
manualRow["UserAdded"] = true;
manualRow["ValueField"] = String.Empty;
manualRow["DisplayField"] = "All";
您可以遍历排序表并将记录复制到第一个记录为"All"的非排序表。
创建另一个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);
}
如果您使用Datatable.Copy(),它将保持您之前的排序,但不会将其应用于新行。
Dim DT As DataTable = GetDTfromsomewhere()
Dim View As DataView = DT.DefaultView()
View.Sort = "SomeColumn"
DT = DT.Copy
Dim Row = DT.NewRow()
Row.Item(0) = 0
Row.Item(1) = "All"
DT.Rows.InsertAt(Row, 0)