如何基于VB ASP.net中的多个数据绑定下拉列表来最佳地过滤gridview& SQL

时间:2016-01-13 06:10:11

标签: sql asp.net vb.net gridview

我有一个gridview,它当前从表中提取所有记录。此外,我有4个下拉列表,这些下拉列表数据绑定到4列中每个列的所有可能值,并且下拉列表列表在gridview中设置为数据库查询的控件。

在每个下行列表中,我在顶部附加了一个空白值,这是默认值,无论何时选择此值,数据库都会使用此值返回所有结果(当该列为null时,没有过滤器。)

这是当前的数据库查询。

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个下拉列表都设置为空值,它返回数据库中的所有结果,由于数据量需要很长时间

我希望能够阻止gridview在初始页面加载时显示任何结果,直到应用其中一个过滤器。我知道,默认情况下,我可以使用一些无效数据,例如“请为每个下拉列表选择一个过滤器”,但理想情况下,我希望用户不必在每个下拉列表中选择空白选项以选择无过滤器,因为大多数查询通常只是一个或两个过滤器。

是否有一种简单的方法可以在初始页面加载之前停止查询,或者使用我忽略的下拉列表进行过滤的最佳做法?

由于

1 个答案:

答案 0 :(得分: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