0

2 つの列DataTable(id、name)を作成します。

        DataTable table = new DataTable();
        DataColumn id = table.Columns.Add("id", typeof(int));
        id.AutoIncrement = true;
        id.AutoIncrementSeed = 1;
        id.AutoIncrementStep = 1;
        id.ReadOnly = true;                  
        table.Columns.Add("name", typeof(String));

名前DataColumn付きidAutoIncrementing(例: ID) です。

次に、ファイルを読み取り、ファイルの各行を行として追加します。

//for each line in file
table.Rows.Add(null,line);

次に、を使用DataTableしてDataColumn名前付きで並べ替えます:nameDataView

        DataView dv = table.DefaultView;           
        dv.Sort = "name";
        table = dv.ToTable();

問題は、列がソートされたくないときにソートされることです (基本的に、列を他の列とは別にidソートしたいだけです)。name

List<string>私が見つけることができた唯一の解決策は、ファイル行を入力し、それをソートしてからテーブルに入力する中間ステップを持つことでした。より洗練された (シンプルな) 解決策があるかどうか疑問に思っていますか?

4

2 に答える 2

2

使用できますLinq-To-DataTable

var orderedRows = table.AsEnumerable()
                       .OrderBy(r => r.Field<String>("name"));

または、名前だけが必要な場合:

var orderedNames = orderedRows.Select(r => r.Field<String>("name"));

を忘れずに追加してくださいusing System.Linq;

編集

各名前は id に属します。ただし、名前がソートされた後の id、name キー、値のペアだけを気にします。たとえば、英数字でソートされた最初の名前は 1 で、次の名前は 2 というようになります。

次に、行を並べ替えた後に行を追加する必要があります。

var txtLines = File.ReadLines(path)
                   .OrderBy(l => l);

foreach(String  line in txtLines)
    tables.Rows.Add(null, line);
于 2012-10-09T16:05:17.893 に答える
0

並べ替え後の id の値が気になる場合は、id 列を再生成する必要があるようです。

table.Columns["id"].ReadOnly = false;
for (int i = 0; i < table.Rows.Count; i++)
{
    table.Rows[i]["id"] = i + 1;
}
table.Columns["id"].ReadOnly = true;
于 2012-10-09T16:39:53.693 に答える