2013-11-28 5 views
0

примечание: все данные столбца хранится как NVARCHARФильтрация DataGridView VB

Моя функция поиска продолжает давать мне ошибки, которые я не понимаю. В принципе, у меня есть comboBox, где пользователь может выбрать фильтрацию поиска для определенного столбца в datagridview, затем они могут ввести поиск в текстовое поле и нажать кнопку для поиска.

Типы ошибок, которые я получаю: Ошибка синтаксиса: Отсутствует операнд после оператора «Родной». // Я набрал текстовое поле поиска «Bold Native» и использовал фильтр столбцов «Films» Невозможно выполнить операцию «Like» на System.String и System.Int32. // Я набрал в поиске текстовое поле «1979» и использовали колонку фильтра «Год»

Очень простой код, просто большой, если/ElseIf заявление для каждого столбца базы данных (извините черточки):

Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click 
    --If ComboBox1.Text = "   No Filter   " Then 
    ----Me.FilmsBindingSource.Filter = Me.FilmsBindingSource.Filter = "Films LIKE " + TbFilter.Text + "% OR Actors LIKE " + TbFilter.Text + "% OR Directors LIKE " + TbFilter.Text + "% OR Writers LIKE " + TbFilter.Text 
    --ElseIf ComboBox1.Text = "Films" Then 
    ----Me.FilmsBindingSource.Filter = "Films LIKE " + TbFilter.Text 
    --ElseIf ComboBox1.Text = "Year" Then 
    ----Me.FilmsBindingSource.Filter = "Year LIKE " + TbFilter.Text 
    --ElseIf ComboBox1.Text = "Duration" Then 
     ----Me.FilmsBindingSource.Filter = "Duration LIKE " + TbFilter.Text 
    --ElseIf ComboBox1.Text = "Actors" Then 
     ----Me.FilmsBindingSource.Filter = "Actors LIKE " + TbFilter.Text 
    --ElseIf ComboBox1.Text = "Directors" Then 
     ----Me.FilmsBindingSource.Filter = "Directors LIKE " + TbFilter.Text 
    --ElseIf ComboBox1.Text = "Writers" Then 
     ----Me.FilmsBindingSource.Filter = "Writers LIKE " + TbFilter.Text 
    --ElseIf ComboBox1.Text = "Own It?" Then 
     ----Me.FilmsBindingSource.Filter = "Own It? LIKE " + TbFilter.Text 
    --ElseIf ComboBox1.Text = "Seen it It?" Then 
     ----Me.FilmsBindingSource.Filter = "Seen It? LIKE " + TbFilter.Text 
    --ElseIf ComboBox1.Text = "Rating" Then 
     ----Me.FilmsBindingSource.Filter = "Rating LIKE " + TbFilter.Text 
    --ElseIf ComboBox1.Text = "Top 10" Then 
     ----Me.FilmsBindingSource.Filter = "Top 10 LIKE " + TbFilter.Text 
    --ElseIf ComboBox1.Text = "Misc" Then 
     ----Me.FilmsBindingSource.Filter = "Misc LIKE " + TbFilter.Text 
    --End If 
End Sub 

Я пытаюсь найти лучший способ фильтровать/искать, но я пока не придумал никаких решений. Есть идеи?

+0

Что об этом: Private Function ApplyFilter (filterText As String) Dim filterString As String = String.Format ("{0} LIKE {1}", ComboBox1.Text, filterText) Me.FilmsBindingSource.Filter = filterString Конечная функция – majjam

+0

Используете ли вы данные для заполнения сетки? Вам нужно использовать фильтр? – NoChance

ответ

0

Попробуйте использовать что-то вроде этого.

Если пользователь не выберет какой-либо элемент, он будет искать по ID. В противном случае он будет искать выбранное поле (критерии).

Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _ 
Handles Button3.Click 
    Dim cmd As New SqlCommand 
    Dim criteria, value As String 
    value = InputBox("Please enter value: ") 
    If ComboBox1.SelectedIndex = 0 Then 
     cmd= New SqlCommand("Select * from DATA Where [email protected]", Connection) 
     cmd.Parameters.AddWithValue("@id", value) 
    Else 
     criteria = ComboBox1.SelectedItem.ToString 
     cmd = New SqlCommand("Select * from DATA where " & criteria _ 
            & " like '%" & value & "%' ", Connection) 
    End If 
    dtTable.Rows.Clear() 
    Dim da As New SqlDataAdapter(cmd) 
    da.Fill(dtTable) 
    Me.DataGridView1.DataSource = dtTable 
End Sub 
Смежные вопросы