質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

ADO.NET

ADO.NETは.NET Frameworkで各種データベースへの統一された接続機能を提供するソフトウェアコンポーネントの集合です。

Q&A

解決済

1回答

420閲覧

ADO.net のDataView dvがありまして、そのdv.Tables.Count = 37なのに、dv.Count = 0 どうして?

Corona

総合スコア14

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

ADO.NET

ADO.NETは.NET Frameworkで各種データベースへの統一された接続機能を提供するソフトウェアコンポーネントの集合です。

0グッド

0クリップ

投稿2022/03/25 11:31

こんにちは。
私の環境は、
Microsoft Visual Studio Community 2022 (64-bit) Version 17.1.2
Microsoft .NET Framework Version 4.8.04084
で、C#を使っています。

DataTable tbl があります。
tbl.Rows.Count = 37です。
ここで、
dataView view = tbl.DefaultView;
としたところ、
view.Table.Rows.Count = 37
ですが、
view.Count = 0
です。
これまでは、こんなことはなくて、こうした場合は、いつも
view.Count ==view.Table.Rows.Count
で、
view.Count = 37
だったはずでした。
ところが、VSをバージョンアップしたせいか、こんな結果に
なってしまいました。

これは一体どういうことなのでしょうか?
なにが原因か教えていただけますよう、お願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Corona

2022/03/25 12:55

Filterをいじっているわけではないので、 view.Filter = ""です。 view.RowStateFilter = CurrentRows です。
Zuishin

2022/03/25 12:55

DataTable にもあります。
退会済みユーザー

退会済みユーザー

2022/03/25 13:44

コピペすればあなたの言う現象が再現できるコードを質問欄に貼ってみてはいかがですか?
Corona

2022/03/25 13:47

おっしゃる通りなのかもしれません。 view.RowStateFilter = CurrentRows となっていたので、そこで view.RowStateFilter = DataViewRowState.OriginalRows; と、してみると、 希望通り view.Count = 37 となります。これまで、こんな必要がなかったので、驚きです。 また、ご提示された、DataTableにFilterがかかっているという点については、どういうことか分からずじまいです。Filterらしきものを見つけることができません。 どんなことなのか、もう少しお聞かせ願えませんでしょうか。 どうぞよろしくお願い致します。
Corona

2022/03/25 14:15

再現できるコードを作ってみましてから、質問させていただきます。 ちょっと、時間がかかるかもしれませんので、あらかじめ、予定をお伝えさせていただきます。 申し訳ございません。
Corona

2022/03/26 04:22

皆様に時間を使わせてしまい、申し訳ありません。 やっと、原因がわかりました。 tbl.AcceptChanges(); を tbl.Rows[i].Delete(); の後でなくて、前に書いていました。 レベルの低い質問で恐縮しますが、これが原因とは。
guest

回答1

0

自己解決

皆様に時間を使わせてしまい、申し訳ありません。
やっと、原因がわかりました。自己解決です。
tbl.AcceptChanges();

tbl.Rows[i].Delete();
の後でなくて、前に書いていました。
レベルの低い質問で恐縮しますが、これが原因とは。

投稿2022/03/26 04:24

Corona

総合スコア14

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2022/03/26 08:30

なんか話が変だと思うのですが? tbl.AcceptChanges(); ⇒ tbl.Rows[i].Delete(); の順だったからとのことですがその場合も、その逆の tbl.Rows[i].Delete(); ⇒ tbl.AcceptChanges(); の場合どちらも DataView.RowStateFilter = DataViewRowState.CurrentRows (そうしたのですよね?)とすると DataView.Count は 0 になると思うのですか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問