在数据表c#中将行移到顶部

时间:2012-07-25 22:30:00

标签: c# asp.net

我有一个数据表,如果地址匹配,则将其中一行移动到数据表的顶部。我使用以下代码,但它不起作用。任何想法如何实现这一点。数据表中的数据是从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();
            }
        }
    }
}

1 个答案:

答案 0 :(得分: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的DataSource。

修改:还试试DataTable.Rows.InsertAt

dtf1.Rows.InsertAt(dtf1.Rows[rowinner], 0);