我有一个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在初始页面加载时显示任何结果,直到应用其中一个过滤器。我知道,默认情况下,我可以使用一些无效数据,例如“请为每个下拉列表选择一个过滤器”,但理想情况下,我希望用户不必在每个下拉列表中选择空白选项以选择无过滤器,因为大多数查询通常只是一个或两个过滤器。
是否有一种简单的方法可以在初始页面加载之前停止查询,或者使用我忽略的下拉列表进行过滤的最佳做法?
由于
答案 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