如何将 DataTable 行移动到其 DataTable 的第一个位置

Posted

技术标签:

【中文标题】如何将 DataTable 行移动到其 DataTable 的第一个位置【英文标题】:How to move a DataTable row to the first position of its DataTable 【发布时间】:2012-11-29 07:57:25 【问题描述】:

我想在 asp.net DataTable 上获取特定行,并将其移动到基于列 column1 值的该 DataTable 上的第一行。我的数据表 dt1 是通过数据库查询填充的,而要搜索的值是通过来自另一个数据库的另一个查询,所以我不知道在 dt1 select 时间要搜索的值。

// I use this variable to search into
// DataTable
string valueToSearch = "some value";

所以我需要在column1 列的DataTable 中搜索值some value。然后将整行移动到第一个位置。

谢谢。

【问题讨论】:

这个 DataTable 是如何填充的? @WonkotheSane 通过数据库查询。图我有带有字符串值的column1 【参考方案1】:

我们必须克隆之前的行数据:

            DataRow[] dr = dtable.Select("column1 ='" + valueToSearch +"'");
            DataRow newRow = dtable.NewRow();
            // We "clone" the row
            newRow.ItemArray = dr[0].ItemArray;
            // We remove the old and insert the new
            ds.Tables[0].Rows.Remove(dr[0]);
            ds.Tables[0].Rows.InsertAt(newRow, 0);

【讨论】:

【参考方案2】:

您必须对此进行性能测试,但一种方法是在查询本身中进行测试。首先获取您想要在顶部的行,然后将其与其余行合并。

由于我对您的数据库一无所知,因此这是一种通用的方法:

SELECT Column1, Column2, Column3
FROM MyTable
WHERE Column1 = 'some value'

UNION

SELECT Column1, Column2, Column3
FROM MyTable
WHERE Column1 <> 'some value'

【讨论】:

我做不到,因为数据表的来源和要搜索的值不同,所以不知道查询时要搜索的值。 在这种情况下,我认为您应该编辑您的问题以提供更多详细信息。数据表是如何填充的(包括绑定),“一些值”是如何作为过滤器输入的,等等。现在,我们都在猜测你的设计。【参考方案3】:

如果该列只有一条搜索值的记录,请尝试此操作

DataRow[] dr = dtEmp.Select("column1 ='" + valueToSearch +"'");
myDataTable.Rows.InsertAt(dr[0], 0);

【讨论】:

我不能插入它,因为它已经属于这个数据表,所以我需要先删除。 看看这个。如果它有效,您不需要删除该行并再次插入它。 codeproject.com/Tips/312545/…

以上是关于如何将 DataTable 行移动到其 DataTable 的第一个位置的主要内容,如果未能解决你的问题,请参考以下文章

如何根据文件名自动创建文件夹并使用 .BAT 将文件移动到其文件夹中

向新建dataset中添加数据

将相机分别移动到其位置

怎么获取DataTable中某一字段的值

随着用户的移动,定期将地图上的所有标记移动到其更新/新的当前位置

ADO.NET: 如何将一个DataTable中的行批量复制到另一个表中?