2016-01-13 4 views
0

У меня есть gridview, который в настоящее время извлекает все записи из таблицы. Кроме того, у меня есть 4 dropdownlists, которые привязаны к всем возможным значениям для каждого из 4 столбцов, а списки dropdownlists устанавливаются как элементы управления в gridview для запроса к базе данных.Как наилучшим образом фильтровать gridview на основе множественных списков dropdownlists для баз данных в VB ASP.net и SQL

В каждом списке downdownlist я добавил пустое значение в начало, которое является значением по умолчанию, и в любое время, когда это значение выбрано, база данных использует это для возврата всех результатов (без фильтра в этом столбце при нулевом значении).

Это текущий запрос к базе данных.

SELECT 
    Week_Ending, Employee, Project, Status_Of_Employment 
FROM 
    Times 
WHERE 
    (@Project IS NULL OR Project LIKE @Project) 
    AND (@Employee IS NULL OR Employee LIKE @Employee) 
    AND (@Status_Of_Employment IS NULL OR Status_Of_Employment LIKE @Status_Of_Employment) 
    AND (@WeekEnding IS NULL OR Week_Ending = CONVERT(datetime, @WeekEnding, 103)) 

Этот запрос позволяет пользователю осуществлять фильтрацию по любому одному или комбинации из 4-х колонок

Это решение работает очень хорошо, за исключением вопроса, что на начальной загрузки страницы, так как все 4 DropDownLists установлены к пустому значению он возвращает все результаты из базы данных, что занимает очень много времени из-за объема данных.

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

Есть ли простой способ остановить запрос перед начальной загрузкой страницы или передовой опыт фильтрации с помощью dropdownlists, которые я просматриваю?

Благодаря

+0

Возможно, вы загрузили 'GridView' в событие' Page_Load', удалите его. – Bharadwaj

+0

Он не загружается в событие Page_Load. Но будучи gridview с настроенным источником данных, который имеет запрос с допустимыми параметрами управления, он автоматически отображает результаты, соответствующие запросу. – MayneIT

+1

Измените его для загрузки с кода. Тогда вы можете контролировать, когда загружать. – Bharadwaj

ответ

0

Вместо того, чтобы программно перемещения GridView привязки к источнику данных в коде позади, я вместо этого снял SelectCommand из источника данных и добавить его программно на первом постбэка. Таким образом мой gridview все еще загружается и отображает мое значение EmptyDataText.

Dim dataSourceBindComplete As Boolean = False 

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 
    If IsPostBack Then 
     If dataSourceBindComplete = False Then 
      dataSourceBindComplete.SelectCommand = "SELECT Week_Ending, Employee, Project, Status_Of_Employment FROM Times WHERE (@Project IS NULL OR Project LIKE @Project) AND (@Employee IS NULL OR Employee LIKE @Employee) AND (@Status_Of_Employment IS NULL OR Status_Of_Employment LIKE @Status_Of_Employment) AND (@WeekEnding IS NULL OR Week_Ending = CONVERT(datetime, @WeekEnding, 103))" 
      dataSourceBindComplete = True 
     End If   
    End If 
End Sub 

 Смежные вопросы

  • Нет связанных вопросов^_^