ASP.NET DataView - проблема с RowFilter и кешем приложений - PullRequest
0 голосов
/ 21 октября 2010

Добрый день, дамы и господа -

Мне было поручено найти и исправить ошибку в незнакомом устаревшем приложении, в которое были внесены некоторые недавние изменения, но у меня нет простого способа(что я знаю), чтобы проверить мою теорию.Я надеюсь, что ваши коллективные знания подтвердят этот тест для меня.

Это приложение лениво загружает списки поиска (tongue-twister?) В DataTable s из базы данных и сохраняет их как объект в HttpContext.Current.Application(HttpApplicationState).

До внесения изменений одна из таблиц поиска была привязана к DropDownList следующим образом (надумано):

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

где 'SomeLookupListName '- это свойство только для чтения, которое возвращает DataTable из HttpContext.Current.Application.Изменения добавили некоторый код, который фильтрует приватный Me._lookupList (DataView) перед привязкой к DropDownList:

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

Что происходит, если вы еще не догадались, это то, чтоDataView теперь фильтруется для каждого пользователя приложения.Я просмотрел код и обнаружил, что большинство других списков поиска копируются в локальные члены следующим образом:

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

Поскольку я не знаю, как атаковать мой сеанс локальной отладки, притворяясь несколькими пользователями,изменение кода для использования последнего метода на самом деле будет отличаться от первого?Применяет ли фильтрация результата DataTable.DefaultView фактическое применение фильтра к базовому DataTable иначе, чем при переносе таблицы с помощью New DataView(...)?

Имеет ли смысл просто очистить фильтр строк после DropDownList связан (кажется плохим решением)?Я хотел бы придерживаться уродливых соглашений, которые использует это приложение, чтобы не удивлять другого разработчика в будущем, который получает аналогичную задачу, в противном случае я бы просто обошел состояние приложения и вытащил элементы прямо из хранилища данных..

Я ценю ваши отзывы.

1 Ответ

1 голос
/ 21 октября 2010

Применяет ли фильтрация результатов DataTable.DefaultView к применению фильтра к базовому объекту DataTable иначе, чем при переносе таблицы в New DataView (...)?

Да.Это создает новое представление, к которому применяется фильтр.Фильтр не применяется к таблице напрямую.Следуя шаблону, чтобы использовать новое представление будет работать.

Кстати, легко протестировать несколько сеансов с вашим отладчиком.Просто откройте два разных браузера (IE и FF) и укажите на одно и то же приложение.Логин пользователя может быть таким же, но сессии будут уникальными.

...