我尝试使用datagridview
在combobox
上创建过滤器。我想要做的是过滤datagridview
中的过滤数据。我有五个comboboxes
用于过滤。
例如,第一个combobox
是年份,那么我仍然希望将搜索过滤到年级,然后过滤到部分,依此类推。因此,用户将能够从数据库中对其搜索进行排序或过滤。
到目前为止,我有我的存储过程代码并在组合框中尝试过。 SchoolYear,Grade,Section,Gender过滤效果很好..除了帐户过滤外,有两种可能的输入是Active和inactive。
当我选择Active进行过滤时,会显示一些非活动记录,否则无效过滤没有问题。
我的存储过程代码:
ALTER PROCEDURE [dbo].[uspYearGradeFilter]
@Year Nvarchar(20)= NULL,
@Grade Nvarchar(20) = NULL,
@Section Nvarchar(20)= NUll,
@Gender Nvarchar(20)= NULL,
@Account Nvarchar(20) = NULL
AS
BEGIN
SET NOCOUNT ON;
SELECT
si.StudentID, si.Surname, si.FirstName,
si.MiddleName, si.Gender, si.BirthDay, si.TelNum,
Birthday, getdate() AS [Today],
Datediff(yy, BirthDay, getdate()) -
CASE
WHEN DATEADD(YY, DATEDIFF(YY, BirthDay, getdate()), BirthDay)
> GETDATE()
THEN 1
ELSE 0
END AS [age]
FROM
StudentInformation si
JOIN
StudentHistory sh ON si.StudentID = sh.StudentID
WHERE
sh.SchoolYear LIKE COALESCE('%'+ @Year+'%', sh.SchoolYear)
AND sh.Levels LIKE COALESCE('%' + @Grade + '%', sh.Levels)
AND siGender LIKE COALESCE('%' + @Gender + '%', si.gender)
AND sh.Section LIKE COALESCE('%' + @Section + '%', sh.Section)
AND si.account LIKE COALESCE('%' + @Account + '%', si.account)
END
我的vb.net代码
Private Sub BindGrid()
Using cmd As New SqlCommand("dbo.uspYearGradeFilter", cn)
cmd.CommandType = CommandType.StoredProcedure
'Add a parameter for all comboboxes but only if a value is selected:
If cboYear.SelectedIndex >= 0 Then
Dim paramYear As New SqlParameter("@Year", SqlDbType.NVarChar, 20)
paramYear.Value = cboYear.Text
cmd.Parameters.Add(paramYear)
End If
If cboGrade.SelectedIndex >= 0 Then
Dim paramGrade As New SqlParameter("@Grade", SqlDbType.NVarChar, 20)
paramGrade.Value = cboGrade.Text
cmd.Parameters.Add(paramGrade)
End If
If cboSection.SelectedIndex >= 0 Then
Dim paramSection As New SqlParameter("@Section", SqlDbType.NVarChar, 20)
paramSection.Value = cboSection.Text
cmd.Parameters.Add(paramSection)
End If
If cboGender.SelectedIndex >= 0 Then
Dim paramGender As New SqlParameter("@Gender", SqlDbType.NVarChar, 20)
paramGender.Value = cboGender.Text
cmd.Parameters.Add(paramGender)
End If
If cboAccount.SelectedIndex >= 0 Then
Dim paramAccount As New SqlParameter("@Account", SqlDbType.NVarChar, 20)
paramAccount.Value = cboAccount.Text
cmd.Parameters.Add(paramAccount)
End If
da.SelectCommand = cmd
dt.Clear()
da.Fill(dt)
dgv1.DataSource = dt
End Using
End Sub
有人可以帮我弄清楚我的代码有什么问题。我只是无法理解,因为我知道逻辑几乎是一样的。感谢
答案 0 :(得分:1)
您是说帐户值设置为有效还是无效?如果是这样,可以选择非活动帐户,因为您正在使用
AND Si.account LIKE COALESCE('%' + @Account + '%', si.account)
您可能想尝试删除前导'%'并改为使用以下行:
AND Si.account LIKE COALESCE(@Account + '%', si.account)