【问题标题】:Sorting datatables in a dataset with the datatable.name使用 datatable.name 对数据集中的数据表进行排序
【发布时间】:2018-04-01 15:43:44
【问题描述】:

我正在将一些 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 的结果

【问题讨论】:

  • 在创建 pdf 之前,您可以创建一个包含可用表格的列表并对其进行排序。然后使用排序列表创建pdf
  • 有很多方法可以实现这一点。你试过linq吗? dataSet.Tables.Cast<DataTable>().Sort() 或者您可以遍历表格并删除错误索引处的表格。到目前为止,您尝试过什么?

标签: c# sorting datatable dataset


【解决方案1】:

使用 Linq 对表格进行排序:

更新(重新排序 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

【讨论】:

  • 这不太可能给出所需的结果。 OP 没有为他的表命名,即使这样对数字字符串进行排序也会得到类似1, 10, 100, 101, 11, 110, 111 的结果。如果他将这些表命名为 000100020003 ... 0101 等,那么它可能会起作用。
  • 好的,可以。然后你只需要使用这个:.OrderBy(item =&gt; int.Parse(item.TableName)) 或其他东西。
  • 把它放在你的答案中,并可能向 OP 展示如何添加表名 ;-)
  • 更新答案。但我认为所有的表都有一个名字。
  • 那么 OP 必须解释他想要对表格进行排序的标准。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-08-16
  • 2017-10-14
  • 2017-05-18
  • 1970-01-01
  • 1970-01-01
  • 2016-07-05
  • 2016-10-29
相关资源
最近更新 更多