Filtrar Columnas de un DataSet 

Fecha: 09/Ago/2004 (08/08/04)
Autor: Sergio -- email: [email protected]

 


Muchas el usuario no desea ver todas las columnas de un Tabla, solo desea ver algunas una manera de hacerlo cuando estamos trabajando con un dataset, cuando trabajamos de manera desconectada (facil seria enviar en el query de la consulta las columnas que el usurio desea, pero tendriamos que estar viajando en cada consulta al servidor, disminuria el rendimiento de la aplicacion. Cuando usamos un dataSet, solo basta ir una vez al servidor, para llenar la tabla, y de ahi trabajamos de manera desconectada.

Para el siguiente ejemplo usaremos un DataSet, un DataGrid y un CheckedLisBox, entre los principales controles.

Creamos una funcion para llenar el DataSet, declarado publicamente:  

   'Llenar el dataSEt
   Private Sub LlenarDataSet()

      'cadena de consulta
      Dim strQuery As String = "SELECT * FROM Authors"
      'string of connection in my machine
      Dim strCn As String = "Data Source=(local); database=pubs; user id=sa; password=sa"

      Dim dA As New SqlDataAdapter(strQuery, strCn)

      'instanciando al dataSet
      miDataSet = New DataSet()

      'enlazando al dataset con el adapter
      Try
         dA.Fill(miDataSet, "Authors")
      Catch err As DataException
         MsgBox("hubo un error: " & err.Message.ToString())
      End Try

   End Sub


			

Creamos un boton para llenar el CheckLis con las columnas de la tabla:
       Private Sub cmdShowColumnas_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdShowColumnas.Click
     
     
      'numero de columnas
     
     
      Dim nCol As Integer
     
     
      Dim i As Integer
     
     
      Dim nameCol As String


      nCol = miDataSet.Tables("Authors").Columns.Count

     

     

      'llnar el checkd
     
     
      For i = 0 To (nCol - 1)
         nameCol = miDataSet.Tables("Authors").Columns.Item(i).Caption
         LstColumnas.Items.Add(nameCol)
     
     
      Next
  
  
   End Sub
Filtramos solo las columnas marcadas y llenamos el dataSet en una grilla:
       'Mostrar solo algunas columnas de un DataSet
  
  
   Private Function FiltrarDataSet() As DataSet
     
     
      Dim i As Integer

     

     

      Dim tempDataSet As New DataSet()
     
     
      'la columan que sera borrada
     
     
      Dim myColumn As DataColumn
     
     
      Dim strColumn As String

     

     

      'recuperando el dataset
     
     
      'se copia porque si no lo referencia
      tempDataSet = Me.miDataSet.Copy()

     

     

      'viendo que filas se selecciono
     
     
      With Me.LstColumnas
        
        
         For i = 0 To .Items.Count - 1
           
           
            'viendo que Check estan selecionados
           
           
            If Not .GetItemChecked(i) Then
              
              
               'recuperando el nombre
               strColumn = .GetItemText(.Items.Item(i))
              
              
               'recuperando la columan del data set
               myColumn = tempDataSet.Tables(0).Columns(strColumn)

              

              

               'ahora si borrando la columan del dataset
              
               tempDataSet.Tables(0).Columns.Remove(myColumn)
           
           
            End If
        
        
         Next
     
     
      End With

     

     

      Return tempDataSet
  
  
   End Function

  

  

   Private Sub cmdFillGrid_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdFillGrid.Click

     

     

      'llenando la grilla con los datos filtrados
     
      dgFiltrado.SetDataBinding(Me.FiltrarDataSet(), "Authors")
  
  
   End Sub

Cualqier cosa envio el codigo en Zip, para que verifiquen el programa. Ah verdad, cambian la cadena de conexion, de acuerdo a como tiene instalado el SqlServer, pueden cambiar la tabla tambien.


ir al índice

Fichero con el c�digo de ejemplo: Sergio_FiltrarDataSet - 31 KB