有人可以帮我这个代码吗?我有一个存储过程,它返回一个连接日历的对象列表:
DECLARE @cols AS NVARCHAR(MAX)
DECLARE @cale AS NVARCHAR(MAX)
DECLARE @ini AS DATETIME
DECLARE @fin AS DATETIME
SET @ini = (SELECT MIN(VerAvv) FROM CalendariVer)
SET @fin = (SELECT MAX(VerSca) FROM CalendariVer)
SELECT @cols = STUFF((SELECT ',' + QUOTENAME(CONVERT(NVARCHAR(10), Data, 103))
FROM Calendario WHERE Data BETWEEN CAST(@ini AS DATE)
AND CAST(@fin AS DATE)
GROUP BY Data
ORDER BY Data
FOR XML PATH(''),TYPE).value('.', 'NVARCHAR(MAX)'),1,1,'')
SET @cale = 'SELECT CalId, PiaId, PiaAcr, VerId, VerCod, Ver, Avvio, Chiusura, '+@cols+'
FROM (SELECT dbo.CalendariVer.CalId, dbo.CalendariVer.PiaId, dbo.CalendariVer.PiaAcr, dbo.CalendariVer.VerId, dbo.CalendariVer.VerCod, dbo.CalendariVer.Ver, CONVERT(nvarchar(10), dbo.CalendariVer.VerAvv, 103) AS Avvio,
CONVERT(nvarchar(10), dbo.CalendariVer.VerSca, 103) AS Chiusura, CONVERT(NVARCHAR(5), dbo.CalendariVer.LezDal, 108) + '' - '' + CONVERT(NVARCHAR(5), dbo.CalendariVer.LezAl, 108) AS Orario,
CONVERT(nvarchar(10), dbo.Calendario.Data, 103) AS Data
FROM dbo.CalendariVer RIGHT OUTER JOIN
dbo.Calendario ON CAST(dbo.CalendariVer.Lez AS date) = dbo.Calendario.Data
WHERE CalID IS NOT NULL
GROUP BY dbo.CalendariVer.CalId, dbo.CalendariVer.PiaId, dbo.CalendariVer.PiaAcr, dbo.CalendariVer.VerId, dbo.CalendariVer.VerCod, dbo.CalendariVer.Ver, CONVERT(nvarchar(10), dbo.CalendariVer.VerAvv, 103),
CONVERT(nvarchar(10), dbo.CalendariVer.VerSca, 103), CONVERT(NVARCHAR(5), dbo.CalendariVer.LezDal, 108) + '' - '' + CONVERT(NVARCHAR(5), dbo.CalendariVer.LezAl, 108), CONVERT(nvarchar(10),
dbo.Calendario.Data, 103)) AS c
PIVOT (MAX(Orario) FOR Data IN ('+@cols+')) AS p'
EXEC (@cale)
一切工作。我在vb中有一个函数回忆:
Public Function Calendario_Ver() As DataTable
Dim cale As New DataTable()
Try
Acon()
Dim cal As New SqlCommand("CalendarioVer", con)
cal.CommandType = CommandType.StoredProcedure
Dim trova As New SqlDataAdapter(cal)
trova.Fill(cale)
Ccon()
Catch ex As Exception
Interaction.MsgBox(ex.ToString, MsgBoxStyle.Critical)
End Try
Return cale
End Function
并使用以下代码填充DataGridView:
Private Sub CaricaCalendario()
Try
With CalVerDataGridView
.Refresh()
.DataSource = Calendario_Ver()
.Columns(0).Visible = False
.Columns(1).Visible = False
.Columns(3).Visible = False
.Columns(2).HeaderText = "Piano"
.Columns(4).HeaderText = "Progetto"
.Columns(5).HeaderText = "Versione"
End With
Catch ex As Exception
Interaction.MsgBox(ex.ToString, MsgBoxStyle.Critical)
End Try
End Sub
一切都工作,但我如何通过列piano
,versione
和ver
过滤数据源或datagridview?
一旦你有了DataTable
,数据如何到达那里是无关紧要的。将DataTable
绑定到BindingSource
并将其绑定到网格。要过滤数据,请设置Filter
的BindingSource
属性。
如果你真的想在没有BindingSource
的情况下这样做,请将表格直接绑定到网格并设置DefaultView.RowFilter
的DataTable
。
例如:
myBindingSource.DataSource = myDataTable
myDataGridView.DataSource = myBindingSource
myBindingSource.Filter = $"SomeColumn LIKE '%{myTextBox.Text}%'"