Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将数据表c中的行移到顶部#_C#_Asp.net - Fatal编程技术网

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

C# 将数据表c中的行移到顶部#,c#,asp.net,C#,Asp.net,我有一个数据表,如果地址匹配,将其中一行移到数据表的顶部。我正在使用以下代码,但它不起作用。你知道如何做到这一点吗。数据表中的数据是从excel文件导入的。我在GridView中尝试了相同的if语句来突出显示重复的行,这很有效,但我也希望将它们移到顶部,因为数据有1000多行,很难一次又一次地上下移动以检查突出显示的行 for (int row = 1; row < dtf1.Rows.Count; row++) { for (int rowinner = 1; rowinner

我有一个数据表,如果地址匹配,将其中一行移到数据表的顶部。我正在使用以下代码,但它不起作用。你知道如何做到这一点吗。数据表中的数据是从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();
            }
        }
    }
}
for(int row=1;row
因此您希望对
数据表重新排序。具有给定地址的行应位于顶部。您可以使用
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();

所以基本上你想订购数据行?!我想逐个比较所有行,如果地址匹配,则将两行移到顶部。
dtf1.AsEnumerable()
生成DataTable的DataRows。因此,
r
是数据行。如果您只想确保地址匹配项位于顶部,并且其他行的顺序无关紧要,则可以省略
然后再忽略
。在这里,地址匹配首先跟在按地址排序的其他行之后。我如何编辑上面的代码来比较两行,然后移动行?@A.J:我不明白,上面的代码比较行,并对它们进行排序,以便地址匹配将排在第一位。是的,如果行匹配将同时移动到表的顶部。这有可能吗?
dtf1.Rows.InsertAt(dtf1.Rows[rowinner], 0);