Поиск в Datagridview с использованием текстового поля VB.net

0

Добрый день, я начинаю программировать на vb.net, и у меня возникла проблема с поиском или фильтрацией datagridview с помощью текстового поля. У меня есть одно текстовое поле для поиска и две кнопки для извлечения значений, которые являются учеником и транспортным средством. Когда нажата кнопка ученика, данные для ученика отображаются и одинаковы для транспортного средства, но когда я перемещаю "Dim dtaset As New DataTable" вне событий студентов, транспортных средств и searchtxt, поиск успешно фильтрует данные данных, а также проблема тоже после перемещения, при нажатии кнопки он добавляет данные для этой кнопки в datagridview, но когда другая кнопка щелкнет после первой кнопки, данные не будут заменены предыдущей, она просто добавит столбцы, которые будут расширять столбцы datagrid. Вот мой код Спасибо заранее

Private Sub searchtxt_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles searchtxt.TextChanged
    con.ConnectionString = "server=localhost;userid=root;password=1234;database=dat"


    Dim dtaset As New DataTable

    Dim DV As New DataView(dtaset)
    DV.RowFilter = String.Format("FirstName Like '%{0}%'", searchtxt.Text)
    DataGridView1.DataSource = DV
End Sub

Public Sub studattenprint()
    con.ConnectionString = "server=localhost;userid=root;password=1234;database=dat"

    Dim adpter As New MySqlDataAdapter
    Dim dtaset As New DataTable
    Dim bsource As New BindingSource


    Try
        con.Open()
        Dim query As String
        query = "select idno as 'Student_ID',lastxt as 'LastName',firstxt as 'FirstName',middletxt as 'MiddleName',log as 'Status',timein as 'Timein',crse as 'Course',dates as 'Date' from dat.studdailyhistory"
        cmd = New MySqlCommand(query, con)

        adpter.SelectCommand = cmd
        adpter.Fill(dtaset)
        If dtaset.Rows.Count >= 0 Then
            numlog.Text = dtaset.Rows.Count.ToString()
        End If
        bsource.DataSource = dtaset
        DataGridView1.DataSource = bsource

        ''DataGridView Design
        DataGridView1.AllowUserToAddRows = False ' Disabled or hide (*) Symbol...

        DataGridView1.RowHeadersVisible = False 'To hide Left indicator..
        DataGridView1.DefaultCellStyle.SelectionBackColor = Color.SteelBlue  'Selection backcolor....
        DataGridView1.AlternatingRowsDefaultCellStyle.BackColor = Color.LightGoldenrodYellow 'Alternating Backcolor.
        DataGridView1.AllowUserToResizeRows = False 'Disabled  row resize...
        DataGridView1.ReadOnly = True
        DataGridView1.MultiSelect = False
        DataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect
        DataGridView1.ShowRowErrors = False
        DataGridView1.ShowCellErrors = False
        DataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.DisplayedCells
        DataGridView1.Sort(DataGridView1.Columns(7), System.ComponentModel.ListSortDirection.Descending)

        adpter.Update(dtaset)
        con.Close()

    Catch ex As Exception
        MessageBox.Show(ex.Message)
    Finally
        con.Dispose()
    End Try
End Sub

Public Sub vehicattenprint()
    con = New MySqlConnection
    con.ConnectionString = "server=localhost;userid=root;password=1234;database=dat"
    Dim SDA As New MySqlDataAdapter
    Dim dtaset As New DataTable
    Dim bSource As New BindingSource


    Try

        con.Open()
        Dim query As String

        query = "select tag_no as 'Tag_No.',platenum as 'Plate no.',ownername as 'Owner_name',log as 'Status',timelog as 'Time_log',dates as 'Date' from dat.vehicdailyhistory"
        cmd = New MySqlCommand(query, con)
        SDA.SelectCommand = cmd
        SDA.Fill(dtaset)
        bSource.DataSource = dtaset
        DataGridView1.DataSource = bSource

        If dtaset.Rows.Count > 0 Then
            numlog.Text = dtaset.Rows.Count.ToString()
        End If

        SDA.Update(dtaset)
        DataGridView1.AllowUserToAddRows = False ' Disabled or hide (*) Symbol...

        DataGridView1.RowHeadersVisible = False 'To hide Left indicator..
        DataGridView1.DefaultCellStyle.SelectionBackColor = Color.SteelBlue  'Selection backcolor....
        DataGridView1.AlternatingRowsDefaultCellStyle.BackColor = Color.LightGoldenrodYellow 'Alternating Backcolor.
        DataGridView1.AllowUserToResizeRows = False 'Disabled  row resize...
        DataGridView1.ReadOnly = True
        DataGridView1.MultiSelect = False
        DataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect
        DataGridView1.ShowRowErrors = False
        DataGridView1.ShowCellErrors = False
        DataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.DisplayedCells
        DataGridView1.Sort(DataGridView1.Columns(5), System.ComponentModel.ListSortDirection.Descending)

        con.Close()
    Catch ex As Exception
        MessageBox.Show(ex.Message)
    Finally
        con.Dispose()
    End Try
End Sub

Private Sub vehicatten_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles vehicatten.Click
    vehicattenprint()
End Sub

Private Sub studatten_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles studatten.Click
    studattenprint()
End Sub
Теги:
datagridview
dataset

1 ответ

1
Лучший ответ

После привязки вашего набора данных к datagrid вы можете попробовать следующий фрагмент кода:

Dim dv As DataView

dv = New DataView(yourDataset.Tables(0), "YourDataColumnName= '" & Me.txtSearchBox.Text & "' ", "YourDataColumnName", DataViewRowState.CurrentRows)
Me.YourDataGridView.DataSource = dv
  • 0
    Спасибо, юань. Где я могу разместить этот код? Я пытаюсь вставить события textchange, но выдает ошибку «Не удается найти таблицу (0)»
  • 0
    @NathanWest обычно такого рода ошибки указывают на то, что набор данных не существует. То есть там нет стола. Вы можете попробовать добавить эту строку после Dim dtaset As New DataTable : Dim aNewDS As New DataSet dtaset = aNewDS.Tables(0)
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню