从 INT 列中提取的搜索页面的复选框

CheckBox from Search Page pulling from an INT Column

我从数据库的多个字段中提取的搜索页面存在一个小问题。我正在为此构建的客户想要合并一个复选框字段,该字段在检查后会拉出所有在列中没有空的事件,该事件是作为int列设置的。我已经为此工作了几天,但无法通过在线和此处的所有资源来解决这个问题。下面是一些与搜索页面和相关查询有关的代码。我不会全部给出,因为它是一大块代码,但我会给出必要的项目,

Search.ascx

<telerik:CompositeLayoutColumn Span="4" Height="30px">
    <Content>
        <asp:CheckBox ID="cbAnnulledTrips" runat="server" Text="Annulled Trips" />
    </Content>
</telerik:CompositeLayoutColumn>

Search.ascx.cs

SqlParameter annulledTripsParameter = new SqlParameter("@AnnulledTrips", SqlDbType.Bit);
annulledTripsParameter.Direction = ParameterDirection.Input;
if (!cbAnnulledTrips.Checked)
    annulledTripsParameter.Value = Convert.ToInt32(0);
else
    annulledTripsParameter.Value = Convert.ToInt32(1);

selectCommand.Parameters.Add(annulledTripsParameter);

sp_SearchResults_ByAllFields

ALTER PROCEDURE [dbo].[sp_SearchResults_ByAllFields]
(
    @StartDate varchar(50) = NULL,
    @EndDate varchar(50) = NULL,
    @OccurrenceNumber varchar(50) = NULL,
    @TrainLine int = NULL,
    @TrainID int = NULL,
    @CarID int = NULL,
    @CategoryType int = NULL,
    @OccurrenceType int = NULL,
    @AnnulledTrips bit,
    @TrainOperator varchar(50) = NULL
)

AS

DECLARE @DateFrom DateTime
SET @DateFrom = Convert(DateTime, @StartDate)
DECLARE @DateTo DateTime
SET @DateTo = Convert(DateTime, @EndDate)               

BEGIN
    SET NOCOUNT ON;
    SELECT  o.OccurrenceID AS [Occurrence ID],
            o.OccurrenceNumber AS [Occurrence], 
            o.OccurrenceDateTime AS [Occurrence Date], 
            l.TrainLine AS [Train Line], 
            o.TrainID AS [Train ID], 
            o.LeadCar AS [Lead Car], 
            o.Car2 AS [Car 2], 
            o.Car3 AS [Car 3], 
            o.Car4 AS [Car 4],
            op.FirstName + ' ' + op.LastName AS [Operator], 
            ct.CategoryType AS [Category],
            ot.OccurrenceType AS [Type]     
    FROM Occurrence o
    LEFT JOIN Location lo ON lo.ID = o.LocationID
    LEFT JOIN Line l ON l.ID = lo.LineID
    LEFT JOIN OccurrenceCategory oc ON oc.ID = o.OccurrenceCategoryID
    LEFT JOIN CategoryType ct ON ct.ID = oc.CategoryTypeID
    LEFT JOIN OccurrenceType ot ON ot.ID = oc.OccurrenceTypeID
    LEFT JOIN Operator op ON op.ID = o.OperatorID
    WHERE   (OccurrenceDateTime >= @DateFrom OR @DateFrom IS NULL)
        AND (OccurrenceDateTime <= @DateTo OR @DateTo IS NULL)
        AND (o.OccurrenceNumber = @OccurrenceNumber OR @OccurrenceNumber IS NULL)
        AND (l.ID = @TrainLine OR @TrainLine IS NULL)
        AND (o.TrainID = @TrainID OR @TrainID IS NULL)
        AND (o.LeadCar = @CarID OR o.Car2 = @CarID OR o.Car3 = @CarID OR o.Car4 = @CarID OR @CarID IS NULL)
        AND (CASE @AnnulledTrips
                WHEN 0 THEN (CASE o.AnnulledTrips IS NULL)
                WHEN 1 THEN (CASE o.AnnulledTrips IS NOT NULL)
             END)
        AND (ct.ID = @CategoryType OR @CategoryType IS NULL)
        AND (ot.ID = @OccurrenceType OR @OccurrenceType IS NULL)
        AND (o.OperatorID = @TrainOperator OR @TrainOperator IS NULL)
END

我在 WHERE 子句中尝试执行的操作为您提供了整个存储过程,但当然,它似乎不起作用。如果您需要我 post 更多代码,请告诉我,我会的。其他一切都很好,但是是的......我没有意识到这是一个如此大的挑战......请帮助!我要疯了!

尝试更改存储过程的这一部分

  AND (CASE @AnnulledTrips
            WHEN 0 THEN (CASE o.AnnulledTrips IS NULL)
            WHEN 1 THEN (CASE o.AnnulledTrips IS NOT NULL)
         END)

对此:

AND (
  (@AnnulledTrips = 0 AND o.AnnulledTrips IS NULL)
  OR (@AnnulledTrips = 1 AND o.AnnulledTrips IS NOT NULL)
)

这是基于您当前的尝试,我不确定这是否符合您对

的初步描述

a checkbox field that, when checked, would pull all occurrences that doesn't have a null in the column

因为您尝试实现的逻辑意味着如果未选中该复选框,那么它只会提取 AnnulledTrips 为 NULL 的记录。

如果这不是您想要的,那么只需从我上面的代码中删除 "AND o.AnnulledTrips IS NULL"。