C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[3]: データテーブルの行の削除について


(過去ログ 126 を表示中)

[トピック内 10 記事 (1 - 10 表示)]  << 0 >>

■75147 / inTopicNo.1)  データテーブルの行の削除について
  
□投稿者/ テンテン (41回)-(2015/03/03(Tue) 15:42:17)

分類:[.NET 全般] 

お世話になっております。
.NET のデータテーブルでINDEX列が指定の値の場合、データテーブルから行を削除したいのですが上手くいきません。
お手数お掛けしますがどなたかエラーの回避方法又は、効率的なデータテーブルの削除方法を教えて頂けませんでしょうか。

下記が現在私が記載しているコードになります。
For i As Integer = 0 To dt.Rows.Count - 1
For j As Integer = 0 To intSELECTCount.Count - 1
If dt.Rows(i).Item("INDEX") = intSELECTCount(j) Then
dt.Rows(i).Delete()
dt.Rows(i).AcceptChanges()
'行が削除されて行数が変更されるため
i -= 1
Exit For
End If
Next
Next

エラー情報
追加情報:位置 に行がありません。

dtの中身
INDEX,KYOUKA
1,kokugo
2,suugaku
3,eigo
4,tiri
5,rekishi
6,buturi

intSELECTCountの中身
1,3,4,6

削除後のdtの中身
INDEX,KYOUKA
2,suugaku
5,rekishi

引用返信 編集キー/
■75148 / inTopicNo.2)  Re[1]: データテーブルの行の削除について
□投稿者/ Mira (5回)-(2015/03/03(Tue) 16:23:28)
2015/03/03(Tue) 16:37:25 編集(投稿者)

iのループを逆向きにやってみてはどうでしょうか?

For i As Integer = dt.Rows.Count - 1 To 0 Step -1

引用返信 編集キー/
■75149 / inTopicNo.3)  Re[1]: データテーブルの行の削除について
□投稿者/ WebSurfer (506回)-(2015/03/03(Tue) 16:41:52)
No75147 (テンテン さん) に返信

> .NET のデータテーブルでINDEX列が指定の値の場合、データテーブルから行を削除したいのですが上手くいきません。

Delete と Remove の違い(詳しくは下記ページ参照)を認識されているでしょうか?

DataRow の削除
https://msdn.microsoft.com/ja-jp/library/03c7a3zb(v=vs.110).aspx

質問者さんが言われる「削除」とはどちらを意味しているでしょうか?
引用返信 編集キー/
■75150 / inTopicNo.4)  Re[2]: データテーブルの行の削除について
□投稿者/ テンテン (42回)-(2015/03/03(Tue) 18:12:28)
No75148 (Mira さん) に返信
> 2015/03/03(Tue) 16:37:25 編集(投稿者)
>
> iのループを逆向きにやってみてはどうでしょうか?
>
> For i As Integer = dt.Rows.Count - 1 To 0 Step -1
→Mira さん回答ありがとうございます。
 iのループを逆向きにやってみたのですが、最終行を削除しようとした時に同一のエラーが出力されてしまいました。
引用返信 編集キー/
■75151 / inTopicNo.5)  Re[2]: データテーブルの行の削除について
□投稿者/ PANG2 (66回)-(2015/03/03(Tue) 18:19:55)
2015/03/03(Tue) 18:20:16 編集(投稿者)
コレクションではなくDataRow配列で昇順ループ
intSELECTCountを一発で検索

For Each dr As DataRow In dt.Select()
    If Array.IndexOf(intSELECTCount, dr("INDEX")) >= 0 Then
        dt.Rows.Remove(dr)
    End If
Next

引用返信 編集キー/
■75153 / inTopicNo.6)  Re[2]: データテーブルの行の削除について
□投稿者/ テンテン (43回)-(2015/03/03(Tue) 19:00:56)
No75149 (WebSurfer さん) に返信
> Delete と Remove の違い(詳しくは下記ページ参照)を認識されているでしょうか?
>
> DataRow の削除
> https://msdn.microsoft.com/ja-jp/library/03c7a3zb(v=vs.110).aspx
>
→WebSurfer さん回答ありがとうございます。
 大変申し訳ないのですがRemoveでも削除出来ることが初めて知りました。
 上記URLを閲覧したのですが大きな違いがいまいち分からなかったのですがDelete だとAcceptChangesをした時に行を削除するということと
 Remove はしなくてもいいと言う事でしょうか?
 理解力がなくて申し訳ございません。


> 質問者さんが言われる「削除」とはどちらを意味しているでしょうか?
 あまり理解はしていないのですがDELETE文で削除しようと考えております。
引用返信 編集キー/
■75154 / inTopicNo.7)  Re[3]: データテーブルの行の削除について
□投稿者/ テンテン (44回)-(2015/03/03(Tue) 19:16:12)
やり方が正しいかどうか定かではありませんが下記のコードで出来ました。
'選択データの削除
For i As Integer = dtCSVFileData.Rows.Count - 1 To 0 Step -1
For j As Integer = 0 To intSELECTCount.Count - 1
If dtCSVFileData.Rows(i).Item(COL_INDEX) = intSELECTCount(j) Then
dtCSVFileData.Rows(i).Delete()
Exit For
End If
Next
Next
dtCSVFileData.AcceptChanges()

ご迷惑をお掛けして申し訳ございませんでした。
解決済み
引用返信 編集キー/
■75155 / inTopicNo.8)  Re[3]: データテーブルの行の削除について
□投稿者/ WebSurfer (507回)-(2015/03/03(Tue) 19:54:08)
No75153 (テンテン さん) に返信

>>質問者さんが言われる「削除」とはどちらを意味しているでしょうか?
>  あまり理解はしていないのですがDELETE文で削除しようと考えております。

DataTable は非接続型のデータ更新に用いるもので(必ずしもその目的だけに使わな
ければならないというわけではありませんが)、SQL Server などの DB のテーブルを
コンピュータのメモリ上に保持し、DataGridView などの UI を通じてユーザーが
DataTable を編集した結果を、SqlDataAtapter などを用いて一気
に DB に書き戻すという目的に使います。

そのイメージは以下のページの「図 1 DataSet 内の更新イメージ」「図 2 DataAdapter
によるSQL 自動発行のイメージ」がよく分かると思います。

DB 設計者のための明解 ADO.NET 第 1 回
https://msdn.microsoft.com/ja-jp/library/cc482903.aspx

Delete メソッドというのは DataRowState に Deleted というマークをつけることです。

そういう意味で Delete メソッドを使うことが質問者さんの目的と合っているかどうか
を考えてみてください。
引用返信 編集キー/
■75156 / inTopicNo.9)  Re[4]: データテーブルの行の削除について
□投稿者/ WebSurfer (508回)-(2015/03/03(Tue) 19:56:09)
解決済みマークを付け忘れました。
解決済み
引用返信 編集キー/
■75163 / inTopicNo.10)  Re[4]: データテーブルの行の削除について
□投稿者/ テンテン (45回)-(2015/03/04(Wed) 10:09:58)
No75155 (WebSurfer さん) に返信
> そういう意味で Delete メソッドを使うことが質問者さんの目的と合っているかどうか
> を考えてみてください。
→WebSurfer さん回答済みの後のフォローありがとうございます。
 教えて頂いたURLを拝見しました処、Deleteメソッドで問題は無いと思われます。
 分かりやすいURLを教えて頂き、ありがとうございました。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -