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