在不更改原始 RowState 的情况下对数据集中的数据表进行排序

Posted

技术标签:

【中文标题】在不更改原始 RowState 的情况下对数据集中的数据表进行排序【英文标题】:Sorting Datatable in Dataset without changing the Original RowState 【发布时间】:2012-08-25 22:25:57 【问题描述】:

我有一个数据集,其中有 2 个表可用。这些表是在加载页面时从数据库填充的。 现在考虑我的情况。 当页面加载时,这两个数据集表都填充了数据库中的数据。

表 1:1 行的项目主表(主表) 表 2:5 行的项目详细信息(子表 - 绑定在 GridView 中)

如果我对“项目详细信息”表什么都不做,那么我的 MyDataset.Tables["ProjectDetailTable"].GetChanges(DataRowState.Modified) 值为 NULL。

但是如果我从 UI 将新的数据行添加到“项目详细信息”表中,我将得到 MyDataset.Tables[TableName].GetChanges(DataRowState.Modified) 的值是添加了新行的数据表。

在 UI 中,当用户从 UI 添加新数据行时,我想对“项目详细信息”表进行排序。所以我做了这样的代码,并在添加新数据行时创建了方法。

private void SortProjectDetailTable(ref DataSet ds)

    DataView dv = new DataView(ds.Tables["ProjectDetailTable"]);
    DataTable dtTemp = new DataTable("ProjectDetailTable");
    dv.Sort = " DATE DESC ";
    dtTemp = dv.ToTable().Copy();

    if (ds.Tables.Contains("ProjectDetailTable"))
        ds.Tables.Remove("ProjectDetailTable");

    ds.Tables.Add(dtTemp);

此方法对数据表进行了完美排序。但是当我尝试获取“MyDataset.Tables["ProjectDetailTable"].GetChanges(DataRowState.Modified)”的值时,我得到它 NULL 而“MyDataset.Tables["ProjectDetailTable"].GetChanges(DataRowState.Added)”的值是 6 行的 DataTable。

其实我也想要这样的

MyDataset.Tables["ProjectDetailTable"].GetChanges(DataRowState.Modified) 值应为“UI 中的 1 个新添加行” MyDataset.Tables["ProjectDetailTable"].GetChanges(DataRowState.Added) 值应该是“NULL”,因为我在页面加载事件中从数据库中获取了 5 行

最后,问题是我想在不影响数据集中行的原始状态的情况下对数据集中的数据表进行排序。

【问题讨论】:

【参考方案1】:
you can use another dataset for new rows for UI and then sort it
after copy it in your dataset

【讨论】:

我想对从数据库和 UI 获取的表的所有行进行排序。

以上是关于在不更改原始 RowState 的情况下对数据集中的数据表进行排序的主要内容,如果未能解决你的问题,请参考以下文章

Movilizer:在不更改数组键的情况下对数据容器进行排序

如何在不改变原始数组的情况下对数组进行排序?

如何在不更改特定列的情况下对数据框中的数据进行重新采样?

如何在不更改特定列的情况下对数据框中的数据进行重新采样?

在不循环 c++ 的情况下对 2D 数组进行分区

在不破坏顺序的情况下对列进行分组