我创建了两列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
的{{1}}为id
(例如身份)。
然后我读取一个文件,并将该文件的每一行添加为一行。
AutoIncrementing
接下来,我使用//for each line in file
table.Rows.Add(null,line);
对名为DataTable
的{{1}} DataColumn
进行排序:
name
问题是,DataView
列在我不希望的情况下进行排序(基本上我只是想独立于另一列对 DataView dv = table.DefaultView;
dv.Sort = "name";
table = dv.ToTable();
列进行排序)。
我找到的解决方案只有一个中间步骤,我用文件行填充id
,然后对其进行排序,然后填充表格。想知道是否有更优雅(简单)的解决方案?
答案 0 :(得分: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,名字 键,名称后的值对已排序。例如。首先 字母数字排序的名称应为1,接下来的2,依此类推
然后,您需要在对行进行排序后添加行:
var txtLines = File.ReadLines(path)
.OrderBy(l => l);
foreach(String line in txtLines)
tables.Rows.Add(null, line);
答案 1 :(得分: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;