0

紳士淑女の皆様、こんばんは --

最近変更が加えられたなじみのないレガシー アプリケーションのバグを見つけて修正する任務を負っていますが、自分の理論をテストする簡単な方法 (私が知っている) がありません。あなたの集合的な知識が私のテストを検証することを願っています.

このアプリケーションは、データベースからルックアップ リスト (舌ひねり?) を s に遅延読み込みし、 (an )DataTableにオブジェクトとして格納します。HttpContext.Current.ApplicationHttpApplicationState

変更が行われる前に、ルックアップ テーブルの 1 つがDropDownList次の方法で にバインドされていました (考案されました)。

Me._lookupList = TheSession.LookupCache.SomeLookupListName.DefaultView
...
ddl.DataSource = Me._lookupList

DataTableここで、'SomeLookupListName' はfromを返す読み取り専用プロパティですHttpContext.Current.ApplicationMe._lookupList変更により、プライベート( DataView) にバインドされる前にフィルター処理するコードが追加されましたDropDownList

Me._lookupList.RowFilter = "SomeTableIDColumn <> " & ... 

まだ推測していない場合DataViewは、アプリケーションのすべてのユーザーに対してフィルター処理が行われています。コードを調べたところ、他のほとんどのルックアップ リストがこの方法でローカル メンバーにコピーされていることがわかりました。

Me._lookupList = New DataView(TheSession.LookupCache.SomeLookupListName)

複数のユーザーになりすまして自分のローカル デバッグ セッションを攻撃する方法がわからないので、後者の方法を使用するようにコードを変更すると、実際には前者とは何か違うのでしょうか? の結果をフィルタリングすると、テーブルを でラップする場合とは異なる方法でDataTable.DefaultViewフィルターが実際に基礎に適用されますかDataTableNew DataView(...)

がバインドされた後に行フィルターを単純にクリアするのは理にかなっていますかDropDownList(悪い解決策のようです)。私は、このアプリケーションが使用する醜い慣習に固執したいと思います。そうすれば、将来、同様のタスクを取得する別の開発者を驚かせることはありません。さもなければ、アプリケーションの状態をバイパスして、データ リポジトリからアイテムを取得するだけです。 .

フィードバックをお待ちしております。

4

1 に答える 1

1

DataTable.DefaultViewの結果をフィルタリングすると、実際には、テーブルをNew DataView(...)でラップする場合とは異なる方法で、基になるDataTableにフィルターが適用されますか?

はい。フィルタが適用される新しいビューを作成します。フィルタはテーブルに直接適用されません。パターンに従って新しいビューを使用すると機能します。

ところで、デバッガーに対して複数のセッションをテストするのは簡単です。2つの異なるブラウザー(IEとFF)を開いて、同じアプリをポイントするだけです。ユーザーログインは同じかもしれませんが、セッションは一意になります。

于 2010-10-21T00:12:32.883 に答える