0

我有一个数据表,如果地址匹配,则将其中一行移动到数据表的顶部。我正在使用以下代码,但它不起作用。任何想法如何实现这一点。数据表中的数据是从 excel 文件中导入的。我已经尝试在 GridView 中使用相同的 if 语句来突出显示重复项并且有效,但我也想将它们移到顶部,因为数据有 1000 多行,并且很难一次又一次地上下移动以检查突出显示的内容排。

for (int row = 1; row < dtf1.Rows.Count; row++)
{
    for (int rowinner = 1; rowinner < dtf1.Rows.Count; rowinner++)
    {
        if (rowinner != row)
        {
            if (dtf1.Rows[row][addresscolno] == dtf1.Rows[rowinner][addresscolno].ToString())
            {
                DataRow newrow = dtf1.Rows[row];
                dtf1.Rows.RemoveAt(row);
                dtf1.AcceptChanges();
                dtf1.Rows.InsertAt(newrow, 1);
                dtf1.AcceptChanges();
                GridView1.DataSource = dtf1;
                GridView1.DataBind();
            }
        }
    }
}
4

1 回答 1

1

所以你想重新排序DataTable. 具有给定地址的行应位于顶部。您可以使用Linq-To-DataSet对行进行排序并使用新顺序CopyToDataTable创建新DataTable的:

// assuming the address is a string in a variable address, to simplify matters
DataTable tblOrdered = dtf1.AsEnumerable()
    .OrderByDescending(r => r.Field<string>("addresscolno") == address)
    .ThenBy(r => r.Field<string>("addresscolno"))
    .CopyToDataTable();

然后,您可以将其用作 GridView 的数据源。

编辑:也DataTable.Rows.InsertAt试一试。

dtf1.Rows.InsertAt(dtf1.Rows[rowinner], 0);
于 2012-07-25T22:38:19.173 回答