none
filtrar en DataGridView sin ADO RRS feed

  • Pregunta

  • Bueno mi pregunta es la siguiente: Tengo un DataGridView en la cual los datos que contienen dicho dataGridView son personalisados (SIN ADO), el problme radica en que quiero filtrar un dato que voy ingresando en un textbox,... Encontre algunos consejos usando un dataview, pero el problema es que para crear un filto lo tengo que hacer con un DataTable y como lo repito una vez mas los datos que contienen mi DataGridVIew son personalisados pero quiero filtrar dichos datos desde un textbox... es posible?, ¿existe otro control que me permita mostrar datos como una tabla y oviamente filtrarlos?,..¿como?..

    PD: USO VisualBasic 2005

    viernes, 25 de septiembre de 2009 5:02

Respuestas

  • Si deseas probar lo que te estoy diciendo, inicia un nuevo proyecto, y en el formulario de inicio, inserta los siguientes controles:

        - 1 control DataGridView.
        - 1 control TextBox.
        - 1 control Button.
        - 1 control BindingSource.

    Copia/Pega el código fuente, y pulsa F5:

    Public Class Form1
    
        Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs) Handles MyBase.Load
    
            ' Asignamos el objeto DataTable al control BindingSource
            Me.BindingSource1.DataSource = CreateDataTable()
    
            ' Enlazamos el control DataGridView con el objeto BindingSource
            Me.DataGridView1.DataSource = Me.BindingSource1
    
            Button1.Text = "Filtrar"
    
        End Sub
    
        Private Function CreateDataTable() As DataTable
    
            ' Creamos un nuevo objeto DataTable
            Dim dt As New DataTable
    
            ' Creamos una columna del tipo de dato Integer
            Dim col As New DataColumn("Columna1", GetType(Integer))
    
            ' Añadimos la columna al objeto DataTable
            dt.Columns.Add(col)
    
            ' Creamos una columna del tipo de dato String
            col = New DataColumn("Columna2", GetType(String))
    
            dt.Columns.Add(col)
    
            ' Devolvemos el objeto DataTable
            Return dt
    
        End Function
    
        Private Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button1.Click
    
            Me.BindingSource1.Filter = "Columna2 = '" & TextBox1.Text & "'"
    
        End Sub
    End Class
    


    En el ejemplo se filtra por la segunda columna, que es del tipo alfanumérico, de ahí que el valor del control TextBox se tenga que encerrar entre comillas simples. Si filtraras por la primera columna, que es numérica, no sería necesario especificar las comillas simples.

    Cuando desees quitar el filtro, ejecuta lo siguiente:

            Me.BindingSource1.Filter = String.Empty
    


    Como habrás podido comprobar, hemos filtrado sin utilizar ADO. :-)

    Enrique Martínez [MS MVP - VB]
    viernes, 25 de septiembre de 2009 11:33
    Moderador

Todas las respuestas

  • Para poder filtrar los datos, necesitarás tener un origen de datos.

    Si en el control DataGridView estás mostrando datos en formato tabular, lo normal es que hagas uso de un objeto DataTable, el cual no tiene por qué estar compuesto con datos de una base de datos, es decir, no es necesario utilizar ADO.

    Ese objeto DataTable se lo asignarías a un objeto BindingSource, y éste último objeto, se lo asignarías a la propiedad DataSource del control DataGridView.

    Hecho ésto, podrás usignar un valor a la propiedad Filter del objeto BindingSource para filtrar los datos por una determinada columna.

    Todo lo que no sea hacer ésto, es mi opinión es complicarse la vida. :-)

    Enrique Martínez [MS MVP - VB]
    viernes, 25 de septiembre de 2009 11:02
    Moderador
  • Si deseas probar lo que te estoy diciendo, inicia un nuevo proyecto, y en el formulario de inicio, inserta los siguientes controles:

        - 1 control DataGridView.
        - 1 control TextBox.
        - 1 control Button.
        - 1 control BindingSource.

    Copia/Pega el código fuente, y pulsa F5:

    Public Class Form1
    
        Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs) Handles MyBase.Load
    
            ' Asignamos el objeto DataTable al control BindingSource
            Me.BindingSource1.DataSource = CreateDataTable()
    
            ' Enlazamos el control DataGridView con el objeto BindingSource
            Me.DataGridView1.DataSource = Me.BindingSource1
    
            Button1.Text = "Filtrar"
    
        End Sub
    
        Private Function CreateDataTable() As DataTable
    
            ' Creamos un nuevo objeto DataTable
            Dim dt As New DataTable
    
            ' Creamos una columna del tipo de dato Integer
            Dim col As New DataColumn("Columna1", GetType(Integer))
    
            ' Añadimos la columna al objeto DataTable
            dt.Columns.Add(col)
    
            ' Creamos una columna del tipo de dato String
            col = New DataColumn("Columna2", GetType(String))
    
            dt.Columns.Add(col)
    
            ' Devolvemos el objeto DataTable
            Return dt
    
        End Function
    
        Private Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button1.Click
    
            Me.BindingSource1.Filter = "Columna2 = '" & TextBox1.Text & "'"
    
        End Sub
    End Class
    


    En el ejemplo se filtra por la segunda columna, que es del tipo alfanumérico, de ahí que el valor del control TextBox se tenga que encerrar entre comillas simples. Si filtraras por la primera columna, que es numérica, no sería necesario especificar las comillas simples.

    Cuando desees quitar el filtro, ejecuta lo siguiente:

            Me.BindingSource1.Filter = String.Empty
    


    Como habrás podido comprobar, hemos filtrado sin utilizar ADO. :-)

    Enrique Martínez [MS MVP - VB]
    viernes, 25 de septiembre de 2009 11:33
    Moderador