0

アドレスが一致する場合、行の1つをデータテーブルの一番上に移動するデータテーブルがあります。次のコードを使用していますが、機能しません。これを達成する方法についてのアイデア。データテーブルのデータは、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-DataSetCopyToDataTableを作成するために使用できます。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);
于 2012-07-25T22:38:19.173 に答える