Фильтрация по контролю gridview VS-2008

Это то, над чем я работаю, чтобы вернуться в мир веб-разработчиков

ASP.Net с VS2008

Дозвуковой как уровень доступа к данным

БД SqlServer

Главная Описание проекта: У меня есть система регистрации студентов. У меня есть веб-страница, на которой должны отображаться записи об учениках.

В настоящее время у меня есть элемент управления gridview, который показывает записи

Пользователь входит в систему и попадает на страницу просмотра студентов. В сетке отображаются учащиеся в системе, где в одном из столбцов отображается статус регистрации: открыт, ожидает, завершен.

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

пример: начальный запрос

Select * from studentrecords where date = convert(varchar(32,getdate(),101)

Затем пользователь должен иметь возможность применить фильтр к возвращаемому набору результатов, чтобы он мог использовать фамилию, например "% Souza%".

Возможно ли это вообще, и является ли привязка источника данных к элементу управления gridview лучшим подходом, или я должен создать настраиваемую коллекцию, унаследованную от базы коллекции, а затем привязать ее к элементу управления gridview?

PS: Извините за опечатку. Моя машина находится под воздействием разлива чая на ноутбук

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

kbvishnu 15.12.2010 07:15
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
1
998
3

Ответы 3

Я использую LINQ-to-SQL, а не Subsonic, поэтому YMMV, но мой подход к фильтрации заключался в предоставлении обработчика OnSelecting источнику данных. В LINQ-to-SQL я могу заменить результат ссылкой на метод DataContext, который возвращает результат применения возвращающей табличное значение функции. Возможно, вы захотите исследовать нечто подобное с Subsonic.

Как сказал Тванфоссон, LINQ очень хорошо подходит для создания составных запросов; вы можете сделать это либо с полностью дунамическим TSQL, который генерирует базовая библиотека, либо с помощью UDF, который вы помечаете с помощью [FunctionAttribute (..., IsComposable = true)] в контексте данных.

Я не знаком с Subsonic, поэтому не могу давать там советы; но еще одна мысль: в вашем коде "date =" вы можете рассмотреть возможность объявления переменной datetime и ее назначения в первую очередь ... таким образом оптимизатор обычно лучше справляется с ее оптимизацией (запрос проще, и нет вопрос, преобразует ли он datetime (для каждой строки) в varchar или varchar в datetime). Самый эффективный способ получить только часть даты - это cast / floor / cast:

SET @today = GETDATE()
SET @today = CAST(FLOOR(CAST(@today as float)) as datetime)

[обновить комментарий]

Возможность повторной компоновки - я имею в виду, что это позволяет вам создать такой запрос, чтобы в базе данных выполнялся только запрос окончательный. Например:

var query = from row in ctx.SomeComplexUdf(someArg)
            where row.IsOpen && row.Value > 0
            select row;

может выйти из строя сервер через TSQL:

SELECT u1.*
FROM dbo.SomeComplexUdf(@p1) u1
WHERE u1.IsOpen = 1 -- might end up parameterized
AND u1.Value > 0 -- might end up parameterized

Дело в том, что с сервера возвращаются только подходящие данные, а не много данных, которые возвращаются, а затем выбрасываются. LINQ-to-SQL может делать все, что угодно, с помощью компилируемых запросов, включая разбиение на страницы, сортировку и т. д. Минимизируя объем данных, загружаемых из базы данных, вы можете значительно улучшить производительность.

Альтернатива без возможности компоновки состоит в том, что она просто выполняет:

SELECT u1.*
FROM dbo.SomeComplexUdf(@p1) u1

А затем отбрасывает другие строки в вашем веб-приложении ... очевидно, если вы ожидаете 20 открытых записей и 10000 закрытых записей, это огромная разница.

MG: когда вы говорите составные запросы, требуется ли для этого повторный запрос к базе данных или это работает с результатом, возвращенным во время первоначального запроса?

Mat 09.11.2008 23:30

Как насчет этого?

Вместо того, чтобы назначать источник данных / таблицу вашему элементу управления сеткой, вместо этого прикрепите к нему DataView.

Вот пример псевдокода:

DataTable myDataTable = GetDataTableFromSomewhere();    
DataGridView dgv = new DataGridView();
DataView dv = new DataView(myDataTable);

//Then you can specify things like:
dv.Sort = "StudentStatus DESC";
dv.Filter = "StudentName LIKE '" + searchName + '";
dgv.DataSource = dv;

...и так далее.

Другие вопросы по теме