QA@IT

同一内容のデータテーブルの削除について

2662 PV

.Netにて取引先のラベル印刷プログラムを作っています。
1件ごとに取引先を検索し、データテーブル(dt)に登録します。
その後、印刷枚数を確定させております。dtには複数の取引先や複数の印刷枚数が登録されております。

dtに登録されているレコードを削除する際に、以下のコードを使っています。
dt.Rows.Remove(dt.Rows(0))
dt.AcceptChanges()
→1行目のみ削除されます。

例えば同じ取引先で3枚印刷する場合、上記のコードですと1行目のみ削除され、
残りの2行目と3行目が印刷されてしまいます。

dtの構成
○○会社→ 削除されます
○○会社→ 残ります
○○会社→ 残ります

→ 同じ取引先で、印刷枚数が2枚以上であれば、全て削除されるようにしたいのですが。

ご教授下さい。
宜しくお願い致します。

回答

テーブルには取引先を識別するコードや名前のようなものは格納されているのですよね?

であれば、例えば「取引先コード」列に文字列型でコードが入っているとしたら

var rows = dt.Select(String.Format("取引先コード = '{0}'", code));
for (int i = 0; i < rows.Length; i++)
{
    dt.Rows.Remove(rows[i]);
}

dt.AcceptChanges();

のようにすればよろしいのではないかと。

(C# のコードですが VB.NET などでしたら適宜読み替えてください)

編集 履歴 (1)
  • フィルタが使えるならフィルタの方がいいと私も思います。 -

以下の様なループで回す場合は、後ろからいかないと上手くいかないです。

例えば一列目(インデックスは 0)にキーとなる値が入っていて、
001のデータを消したい場合のサンプル。

Dim keyValue = "001"

For i = dt.Rows.Count - 1 to 0 Step -1
    If dt.Rows(i)(0).ToString() = keyValue Then
          dt.Rows.Remove(dt.Rows(i))
    End If
Mext
dt.AcceptChanges()
編集 履歴 (1)
ウォッチ

この質問への回答やコメントをメールでお知らせします。