使用datatable.name对数据集中的数据表进行排序

时间:2017-10-20 13:00:29

标签: c# sorting datatable dataset

我正在将一些xml文件读入数据集,对数据表进行排序,并为每一行(如果不存在)生成另一个数据集中的新数据表。

 foreach (FileInfo f in files)
            {
                if (f.Name.StartsWith("ID_" + lbl_ID.Text))
                {
                    dsDatei.Reset();
                    dsDatei.ReadXml(Application.StartupPath + f.Name);

                    DataTable dtSort = dsDatei.Tables[0].Clone();
                    dtSort.Columns[1].DataType = typeof(Int32);
                    foreach (DataRow dr in dsDatei.Tables[0].Rows)
                    {
                        dtSort.ImportRow(dr);
                    }
                    dtSort.DefaultView.Sort = "Number";
                    dsDatei.Tables.RemoveAt(0);
                    dsDatei.Tables.Add(dtSort.DefaultView.ToTable());

                    ...some code

            foreach (DataRow dr in dsDatei.Tables[0].Rows)
               {

                   if (!dsAusdruck.Tables.Contains(dr[1].ToString()))
                            {
                                dsAusdruck.Tables.Add(dr[1].ToString());
                                dsAusdruck.Tables[dr[1].ToString()].Columns.Add("Position");
                                ...add more columns
                            }
                    ...some code
                }
            }
            }

我的问题是,例如在第一个xml文件中缺少数字144,在第二个xml文件中,数字144存在,并且在数据集的末尾创建名称为144的数据表。

稍后我使用数据集创建一个pdf文件,为每个数据表创建一个新页面。所以我在最后一页获得了数字144,而不是在数字143和145的页面之间。

那么如何对数据集中的数据表进行排序呢?

由于

回答PinBack的结果

enter image description here

1 个答案:

答案 0 :(得分:2)

使用Linq订购表格:

UPDATE(重新排序Tablecollection):

DataSet loDs = new DataSet();

loDs.Tables.Add(new DataTable("141"));
loDs.Tables.Add(new DataTable("142"));
loDs.Tables.Add(new DataTable("143"));
loDs.Tables.Add(new DataTable("145"));
loDs.Tables.Add(new DataTable("144"));

var loSortedDataTableList = loDs.Tables.Cast<DataTable>().OrderBy(item => int.Parse(item.TableName)).ToList();
loDs.Tables.Clear();

foreach (DataTable loDt in loSortedDataTableList)
{
    loDs.Tables.Add(loDt);
    Console.WriteLine(loDt.TableName);
}

输出是:

  

141
  142个
  143个
  144个
  145