Как настроить SQL-запрос, в котором параметры извлекаются из DropDownList, но по умолчанию фильтрация не выполняется? - PullRequest
0 голосов
/ 07 октября 2011

У меня нет проблем при создании sql запросов, в которых значение параметра берется из элемента управления (выпадающий список). Однако, как я могу настроить свой запрос и настроить раскрывающийся список, чтобы при первой загрузке страницы никакое значение не использовалось в качестве параметра? Например, скажем, я должен был создать сетку, которая фильтрует по состоянию. Раскрывающийся список содержит список состояний для фильтрации. Однако, допустим, я хотел включить значение под названием «Все состояния», и должно ли оно быть значением по умолчанию, а gridfview показывает все состояния?

Ответы [ 3 ]

1 голос
/ 07 октября 2011

Поскольку вы используете элемент управления SqlDataSource; Я думаю, что вам лучше всего создать хранимую процедуру и использовать ее. Затем вы можете установить значение параметра «по умолчанию» и установить что-то вроде «Все». Тогда ваша хранимая процедура может выполнить логику, выясняя, как создать «ГДЕ».

AFAIK SqlDataSource не имеет возможности изменять или пропускать параметры.

EDIT

Более подробная информация здесь о настройке значений параметров по умолчанию. Это довольно просто.

Что касается вашей хранимой процедуры, вы хотели бы, чтобы она принимала параметр, возможно, строку, и затем она решала, использовать или нет предложение WHERE, подобное этому:

CREATE PROCEDURE GetStatesFromParameter
    -- Add the parameters for the stored procedure here
    @state nvarchar(MAX) = 'All'
AS
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;

    IF @state = 'All'
    BEGIN
        SELECT * FROM States
    END
    ELSE
    BEGIN
        SELECT * FROM States WHERE Name = @state
    END
END
GO
0 голосов
/ 07 октября 2011

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

Protected Sub MyDDL_OnDataBound(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyDDL.DataBound
    If Not Page.IsPostBack() Then
       DirectCast(sender, DropDownList).Items.Insert(-1, New ListItem("--All States--",0)) 
    End If
End Sub

Тогда в вашей хранимой процедуре. Проверьте значение входящего состояния 0, чтобы вернуть все из них.

0 голосов
/ 07 октября 2011

Я бы создал хранимую процедуру и использовал необязательный параметр, например:

ALTER PROCEDURE [dbo].[GetSomeData](
    @Col1 INT = NULL --@Col1 being the value of the DDL
) AS

SET NOCOUNT ON
BEGIN

    SELECT Col1, Col2, Col3
    FROM   SomeTable
    WHERE  (@Col1 IS NULL OR Col1 = @Col1)

END
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...