2017-12-19 7 views
0

誰かがこのコードを手伝ってくれますか?VB .net filter datagridview datasourceがストアドプロシージャdsqlピボット

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, '[email protected]+' 
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 ('[email protected]+')) AS p' 

EXEC (@cale) 

すべての作業: 私は、オブジェクトのリストを返すストアドプロシージャは、カレンダーに参加しました。

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を埋める:私は思い出すVBで機能しましあまりに

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 

すべての作業を、私は列pianoversioneとのことで、データソースまたはDataGridViewのをフィルタリングする方法ver

答えて

0

DataTableを取得したら、そのデータがどのように取得されたかは関係ありません。 DataTableBindingSourceにバインドし、それをグリッドにバインドします。データをフィルタ処理するには、BindingSourceFilterプロパティを設定します。

実際にBindingSourceがない場合は、テーブルをグリッドに直接バインドし、のDefaultView.RowFilterを設定します。例えば

myBindingSource.DataSource = myDataTable 
myDataGridView.DataSource = myBindingSource 

myBindingSource.Filter = $"SomeColumn LIKE '%{myTextBox.Text}%'" 
+0

は私がDataGridView' 'に' BindingSource'、何も変更を試してみました。 – GCA

+0

それからあなたは間違っていました。あなたがしたことを私たちに示さなければ、何が間違っているか教えてもらえません。 – jmcilhinney

+0

私はサブでこのコードを入力: 'ます。Public Sub SelezionePiani()新しいのBindingSourceとして 薄暗いPIA pia.DataSource = Calendario_Ver() をCalVerDataGridView .Refresh(で) .DataSource = PIA .Filter( "PiaId = '"&CalVerPiaComboBox.SelectedValue& "'") 最後に End Sub' – GCA

関連する問題