我必须完成一项看起来很不重要的任务,但事实证明这比我预料的要困难得多。这里是场景:我将如何去从单独的SQL Server数据库查询加载结果集到GridView?
我有一个GridView
从我的SQL Server
数据库获取数据并将其显示在网页上(一个非常正常的场景)。但是,我有一些筛选器可以确定在数据库上运行哪个查询,这显然会确定最终显示在GridView
中的数据。我有效地整合这些过滤器有点麻烦。目前,我有这三个子程序:LoadPendingRequests()
,LoadApprovedRequests()
和LoadDeniedRequests()
。正如您所预料的那样,我有一个CheckboxList
,它允许用户选择“待定”,“批准”或“拒绝”,并根据选择哪个,调用相应的子例程,从而在GridView
中填充相应的数据。这部分工作。
但是,用户可以选择同时加载挂起,拒绝和批准请求的任意组合。这是我遇到麻烦的地方。下面是CheckboxList
的SelectedIndexChanged
事件处理程序:
Protected Sub CheckboxList1_SelectedIndexChanged(sender As Object, e As System.EventArgs) Handles CheckboxList1.SelectedIndexChanged
If CheckboxList1.SelectedIndex < 0 Then
CheckboxList1.SelectedIndex = 0
End If
If CheckboxList1.Items(0).Selected = True Then 'pending checkbox
LoadPendingRequests()
End If
If CheckboxList1.Items(1).Selected = True Then 'approved checkbox
LoadApprovedRequests()
End If
If CheckboxList1.Items(2).Selected = True Then 'denied checkbox
LoadDeniedRequests()
End If
End Sub
下面是加载请求(他们都是一样的,只需更换过滤器的“where”子句字)子程序的例子:
Protected Sub LoadPendingRequests()
Try
Dim DbConnection As New DevConnection()
Dim Da As New SqlDataAdapter()
Using DbConnection.Conn
DbConnection.Conn.Open()
Using SqlCmd As New SqlCommand()
With SqlCmd
.Connection = DbConnection.Conn
.CommandType = CommandType.Text
.CommandText = "SELECT * FROM dbo.reqTable where Status = 'Pending'"
End With
Using Da
Da.SelectCommand = SqlCmd
Using Dt As New DataTable()
Da.Fill(Dt) 'populates the dataset
Gv.DataSource = Dt
'Gv.DataBind()
CheckSuggestionApprovalStatus()
End Using
End Using
End Using
End Using
Catch ex As Exception
End Try
End Sub
如何在用户点击CheckboxList
中的方框时同时加载未决,已批准和拒绝的请求?如有必要,我愿意完全改变这一过程。
最简单的方法来解决这个问题(尽管纯粹主义者可能会皱起眉头)是只有一个查询,其中WHERE子句是根据检查框而动态构建的。 – peterG
@peterG感谢您的回复。我也想这样做。我想看看有没有人有其他方法的想法,但我最终可能会这样做。 – ic3man7019
更好的选择是创建一个接收状态作为参数的存储过程。 –