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

时间:2012-08-31 05:55:35

标签: c# sorting datatable dataset

我有一个数据集,其中有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行

最后,问题是我想在数据集中对Datatable进行排序而不影响Dataset中的原始行状态。

1 个答案:

答案 0 :(得分:0)

you can use another dataset for new rows for UI and then sort it
after copy it in your dataset