- PR -

データテーブルの上書き

1
投稿者投稿内容
どら
ベテラン
会議室デビュー日: 2004/08/18
投稿数: 63
投稿日時: 2006-10-11 17:04
VS2005 VB win xp winform

いつも、拝見しております。

質問があります。

データテーブルのデータを昇順にし、データを加工させ、データテーブルを上書きするというのは可能でしょうか?

やりたいことは、コード 1 , 5 , 3 , 8 とある、レコードを コードで昇順にし、1から連番で振りなおしたいのです。

現状、データテーブルの値をDataViewに入れ昇順し、新しく作ったデータテーブルに
追加していき、そこでできたデータテーブルをループさせて連番を振っています。

Dim dt2 As DataTable = ds.Tables("テスト1").Clone()
Dim dv As DataView = New DataView(ds.Tables("テスト1"))
dv.Sort = "コード"

'ソートされたレコードのコピー
For Each drv As DataRowView In dv
dt2.ImportRow(drv.Row)
Next

For i = 0 To dt2.Rows.Count - 1
dt2.Rows(i)("コード") = i + 1
Next

      'ds.Tables().Add(dt2)

上記のような、コードを記述しております。

加工後のdt2を、大元のds.Tables("テスト1")に上書きするといったことは、できるのでしょうか??

また、違うやり方で実装できるやり方がございましたら、ご教授お願いいたします。
ぽぴ王子
ぬし
会議室デビュー日: 2006/03/24
投稿数: 475
お住まい・勤務地: お住まい:城・勤務地:城
投稿日時: 2006-10-11 17:28
こんにちは。

せっかく DataView でソートしているので、それを ImportRow しても、でき
たテーブルがその順番に並んでいるとは限らないんじゃないでしょうか。
ということで、ソートしたものをコピーするタイミングで番号を振るべきかと思って
ちょっと書いてみました。
VB じゃなくて C# になってますが。

コード:

    DataTable dt2 = ds.Tables["テスト1"].Clone();
    DataView dv = new DataView(ds.Tables["テスト1"]);
    dv.Sort = "コード";

    // ソートされたレコードのコピー
    int Count = 1;
    dt2.Clear();
    foreach (DataRowView drv in dv)
    {
      DataRow r = dt2.NewRow();
      r.ItemArray = ((DataRow)drv.Row).ItemArray;
      r["コード"] = Count++;
      dt2.Rows.Add(r);
    }

    ds.Tables.Remove(ds.Tables["テスト1"]);
    ds.Tables.Add(dt2);


テーブルを上書きするというよりは、データセット中のテーブル "テスト1" を新し
いテーブルで置き換えるというような感じになると思います。
_________________
ぽぴ王子@わんくま同盟
ぽぴ王子の人生プログラミング中 / ぽぴンち。
ぽぴ王子
ぬし
会議室デビュー日: 2006/03/24
投稿数: 475
お住まい・勤務地: お住まい:城・勤務地:城
投稿日時: 2006-10-11 17:43
よく考えると、別に Clone を作る必要はないような気がしてきました。
DataView から元の DataTable を書き換えちゃってもいいような。
ということで改訂版。

コード:

    DataView dv = new DataView(ds.Tables["テスト1"]);
    dv.Sort = "コード";

    // ソートされたレコードのコピー
    int Count = 1;
    ds.Tables["テスト1"].BeginInit();
    foreach (DataRowView drv in dv)
    {
      drv.Row["コード"] = Count++;
    }
    ds.Tables["テスト1"].EndInit();


気になるのは、DataView のソート条件にあたる列の元データを書き換えても
DataView の並びが変化したりしないかというところだったりしますが。

皆さんガンガンツッコミお願いします。(C)某アンドロイドの人
_________________
ぽぴ王子@わんくま同盟
ぽぴ王子の人生プログラミング中 / ぽぴンち。
どら
ベテラン
会議室デビュー日: 2004/08/18
投稿数: 63
投稿日時: 2006-10-11 18:29
ぽぴ王子さん、返答ありがとうございます。

改訂版の方で行ったところ、無事実装することができました。

直接書き込んでしまうといった手が、あったのですね。

引用:

気になるのは、DataView のソート条件にあたる列の元データを書き換えても
DataView の並びが変化したりしないかというところだったりしますが。



のところですが、登録時にこの処理を入れており、登録をしたら、クリアしてしまうので問題はなさそうでした。

引用:

ds.Tables.Remove(ds.Tables["テスト1"]);
ds.Tables.Add(dt2);



も、使う機会がありましたら、ぜひ参考にさせていただきます。

ありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)