0
我正在嘗試使用combobox
在datagridview
上創建一個過濾器。我想要做的是過濾datagridview
中的過濾數據。我有五個comboboxes
過濾。vb.net中的數據過濾
例如,第一個combobox
是年份,那麼我仍然想要將搜索過濾爲年級,然後過濾到部分等。因此,用戶將能夠從數據庫中排序或過濾他的搜索。
到目前爲止,我有我的存儲過程代碼,並在組合框中試過。 SchoolYear,年級,部分,性別過濾效果良好..除了帳戶過濾外,還有兩種可能的輸入活動和非活動。
當我選擇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
可有人請幫我找出什麼是錯我的代碼。我只是無法理解,因爲我知道邏輯幾乎相同。謝謝
太感謝你了:如果是這樣,不活動的帳戶可能因爲您使用
您可能需要嘗試去掉開頭的「%」和使用以下行有所回升。我沒有注意到這一點。有用 :-) –