2015-06-20 4 views
1

Мне нужно фильтровать datagridview с помощью текстового поля. Код ниже, который я использую для заполнения функции gridview.getdata класса db, возвращает datatable.Поиск в datagridview в приложении Windows VB.NET

Я не использую свойство datasource gridview, вместо этого я подаю gridview с помощью цикла.

Я могу выполнить поиск с использованием свойства datasource и dataview, но я не должен заполнять datagridview непосредственно из свойства datasource.

Sub griddesgn() 
    DataGridView1.Columns.Clear() 
    DataGridView1.Rows.Clear() 
    DataGridView1.Columns.Add("crime", "crime") 
    DataGridView1.Columns.Add("actname", "actname") 
    DataGridView1.Columns.Add("section", "section") 
    DataGridView1.Columns.Add("description", "description") 
End Sub 

Private Sub TEST_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 
    griddesgn() 
    Dim DBOBJ As New db 
    Dim DTT As DataTable = DBOBJ.getdata("SELECT crime,actname,section,description from natureofcomplaint_women") 

    If DTT.Rows.Count > 0 Then 
     For i As Integer = 0 To DTT.Rows.Count - 1 
      DataGridView1.Rows.Add() 
      DataGridView1.Rows(i).Cells("crime").Value = DTT.Rows(i).Item("crime") & "" 
      DataGridView1.Rows(i).Cells("actname").Value = DTT.Rows(i).Item("actname") & "" 
      DataGridView1.Rows(i).Cells("section").Value = DTT.Rows(i).Item("section") & "" 
      DataGridView1.Rows(i).Cells("description").Value = DTT.Rows(i).Item("description") & "" 
     Next 
    End If 

End Sub 
+0

Извините, это не ясно для меня. Вы упоминаете поиск в своем названии, но вы (неявно) говорите об использовании 'ItemsSource' в своем вопросе. –

+0

Я программно заполняю данные в gridview, используя для цикла из datatable dt, возвращаемого функцией getdata. Теперь данные должны быть отфильтрованы, как только я начну вводить текст в текстовом поле. Thats It ... – user3449614

+2

Свяжите DataTable с DataGridView с BindingSource , Затем используйте свойство Filter для BindingSource. – Graffito

ответ

0

Используйте WHERE заявление в вашем SQL Query

"SELECT crime,actname,section,description from natureofcomplaint_women WHERE crime = " & txtSearch.text 

(Если вы хотите найти на преступления.) Изменение к вашим потребностям. Просто повторите DataGrid заполнения вы использовали выше, но с altereted запроса SQL каждый раз, когда вы набираете/нажать кнопку поиска

0

Я все еще думаю, что лучше, чтобы связать ...

Sub griddesgn() 
DataGridView1.Columns.Clear() 
DataGridView1.Rows.Clear() 
DataGridView1.Columns.Add("crime", "crime") 
DataGridView1.Columns.Add("actname", "actname") 
DataGridView1.Columns.Add("section", "section") 
DataGridView1.Columns.Add("description", "description") 
End Sub 

Private Sub TEST_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 
    griddesgn() 
    Dim DBOBJ As New db 
    Dim DTT As DataTable = DBOBJ.getdata("SELECT crime,actname,section,description from natureofcomplaint_women") 

    Dim source1 as New BindingSource() 
    source1.DataSource = DTT 
    source1.Filter = "crime = '" & textboxtCrime.text & "'" 
    DataGrideView1.DataSource = source1 

End Sub 
+0

Он отлично работает, но я должен применить некоторые форматы к данным, возвращаемым из datatable.thats y Я использую for loop для заполнения gridview. – user3449614

+0

Хорошо, если вы должны использовать цикл for, вы можете содержать часть его копирования внутри блока If, который включает только строки, которые соответствуют всем критериям: я отправлю еще один ответ ниже в течение нескольких минут с примером. – DiscipleMichael

+0

, пожалуйста, напишите свой ответ. Ожидая ответа на 4 ура – user3449614

0
Sub griddesgn() 
    DataGridView1.Columns.Clear() 
    DataGridView1.Rows.Clear() 
    DataGridView1.Columns.Add("crime", "crime") 
    DataGridView1.Columns.Add("actname", "actname") 
    DataGridView1.Columns.Add("section", "section") 
    DataGridView1.Columns.Add("description", "description") 
End Sub 

Private Sub TEST_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 
    griddesgn() 
    Dim DBOBJ As New db 
    Dim DTT As DataTable = DBOBJ.getdata("SELECT crime,actname,section,description from natureofcomplaint_women") 

    If DTT.Rows.Count > 0 Then 
     For i As Integer = 0 To DTT.Rows.Count - 1 
     If (DTT.Rows(i).Item("Crime").Contains(txtCrimeFilter.Text) AND & _ 
       (DTT.Rows(i).Item("actname").Contains(txtActnameFilter.Text) AND & _ 
       (DTT.Rows(i).Item("section").Contains(txtSectionFilter.Text)  AND & _ 
       (DTT.Rows(i).Item("description").Contains(txtDescriptionFilter.Text) 
       DataGridView1.Rows.Add() 
       DataGridView1.Rows(i).Cells("crime").Value = DTT.Rows(i).Item("crime") & "" 
       DataGridView1.Rows(i).Cells("actname").Value = DTT.Rows(i).Item("actname") & "" 
       DataGridView1.Rows(i).Cells("section").Value = DTT.Rows(i).Item("section") & "" 
       DataGridView1.Rows(i).Cells("description").Value = DTT.Rows(i).Item("description") & "" 
     End If 
    Next 
End If 

End Sub

+0

Предполагается, что у вас есть текстовое поле для фильтра для каждого из 4 столбцов ... если нет, то удалите их. Кроме того, фильтр выше чувствителен к регистру ... если вы этого тоже не хотите, тогда просто .ToUpper как элемент строки, так и textbox.text – DiscipleMichael

+0

Точно, какая часть требования не выполняет это? Он программно заполняет datagridview и применяет фильтр. – DiscipleMichael

Смежные вопросы