Search code examples
vb.netdatagridviewvisual-studio-2022dataview

vb.net filter dataview without a bindingsource


I have a dataview that i wnat to filter as you type. i don't have a bindingsource because honestly i don't know how... :/

if have to use a binding source could you point me to agood tutorial?

my code works for what i need but i want them to be able to search the combobox.

my code:

    Private Sub ProspectosMain_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        'Fill Prospectos
        Dim dt_Prospectos As DataTable

        dt_Prospectos = Fill("SP_Obtiene_Prospectos", 0)

        Dim dv As DataView = dt_Prospectos.AsDataView()
        dv.Sort = "Compañia"
        dgvProspectosMain.DataSource = dv
        dgvProspectosMain.Columns("IdPros").Visible = False
        dgvProspectosMain.Columns("Compañia").HeaderText = "Compañia"
        dgvProspectosMain.Columns("Contacto").HeaderText = "Contacto"
        dgvProspectosMain.Columns("Dir").HeaderText = "Direccion"
        dgvProspectosMain.Columns("Mail").HeaderText = "Mail"
        dgvProspectosMain.Columns("Telefono").HeaderText = "Telefono 1"
        dgvProspectosMain.Columns("Telefono2").HeaderText = "Telefono 2"
        dgvProspectosMain.Columns("Observaciones").HeaderText = "Observaciones"
        dgvProspectosMain.Columns("Nombre").HeaderText = "Contacto usalentes"
        dgvProspectosMain.Columns("FechaAlta").HeaderText = "Fecha de Alta"
        dgvProspectosMain.Columns("IdLocalPuesto").Visible = False

        'Combo Compañias
        Dim dt_Co As DataTable
        dt_Co = Fill("SP_Obtiene_Prospectos_Combos", 0)
        cboCompañia.DataSource = dt_Co
        cboCompañia.DisplayMember = "Compañia"
        cboCompañia.ValueMember = "Compañia"
        'Combo Contactos
        Dim dt_Con As DataTable
        dt_Con = Fill("SP_Obtiene_Prospectos_Combos", 1)
        cboContacto.DataSource = dt_Con
        cboContacto.DisplayMember = "Nombre"
        cboContacto.ValueMember = "Nombre"
    End Sub
    Public Function Fill(itxt As String, itipo As Integer) As DataTable
        Dim dt As New DataTable
        Dim sda As New SqlDataAdapter
        Dim cmd As New SqlCommand

        Using myConn = New SqlConnection(CadenaConexion)
            cmd.CommandType = CommandType.StoredProcedure
            cmd.CommandTimeout = 0
            cmd.CommandText = itxt
            cmd.Parameters.Add("@Tipo", SqlDbType.Int).Value = itipo

            myConn.Open()
            cmd.Connection = myConn
            sda.SelectCommand = cmd
            sda.Fill(dt)
            myConn.Close()

            Fill = dt

        End Using
    End Function

what i need is to filter on textchanged

    Private Sub cboCompañia_TextChanged(sender As Object, e As EventArgs) Handles cboCompañia.TextChanged

'here i need to filter

    End Sub

any help would be apreciated. Thanks!


Solution

  • You can just set the DataGridView.DataSource to the DataView...

    Dim dtb As New DataTable
    dtb.Columns.Add("Col1", GetType(String))
    dtb.Columns.Add("Col2", GetType(String))
    dtb.Columns.Add("Col3", GetType(String))
    dtb.Rows.Add("A", "B", "C")
    dtb.Rows.Add("C", "A", "B")
    dtb.Rows.Add("B", "C", "A")
    
    Dim dvw As DataView = New DataView(dtb)
    dvw.Sort = "Col3"
    dvw.RowFilter = "Col3<'C'"
    DataGridView1.DataSource = dvw