2つのテーブルが使用可能な1つのデータセットがあります。このテーブルは、ページの読み込み中にデータベースから入力されます。今、私のシナリオを考えてみましょう。ページが読み込まれると、この2つのデータセットテーブルにデータベースのデータが入力されます。
表1:1行のプロジェクトマスター(マスターテーブル)
表2:5行のプロジェクト詳細(子テーブル-GridViewでバインド)
「プロジェクト詳細」テーブルに何もしない場合、のi値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)
ページ読み込みイベントでdatabseから5行を取得するため、値は「NULL」である必要があります
最後に、問題は、データセットの行の元の状態に影響を与えずに、データセットのデータテーブルを並べ替えたいということです。