将项插入已排序的数据表中

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将项插入已排序的数据表中相关的知识,希望对你有一定的参考价值。

我有一个数据表,其defaultview.sort已经设置,数据表填充了数据,我想要做的是向数据表添加一行,但我需要这一行始终是第一行,其余的要正常排序的表,这是我的代码:

//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";
另一答案

您可以传递已排序的表并将记录复制到第一个记录为“全部”的非排序表。

另一答案

创建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)

以上是关于将项插入已排序的数据表中的主要内容,如果未能解决你的问题,请参考以下文章

调整 JavaScript 中代码排序的输入

七种基于比较的排序,基于Java实现,收藏一下?

排序算法 #4 再讲插入排序

插入排序——C语言

排序算法 插入排序(直接插入排序半插入排序希尔排序)

八大排序 (万字总结)(详细解析,建议收藏!!!)