2016-12-23 3 views
0

У меня есть dataGrid в моем приложении. Я использую событие TextChanged для фильтрации сетки данных. У меня есть четыре текстовых поля для фильтрации. Я использую SQL-запрос с LIKE , Когда я использую фильтр только с двумя текстовыми полями, этот метод работает отлично. Но если я использую три, из четырех (поскольку мне нужно четыре), он не фильтрует сетку данных справа. Он не отображает все совпадения и когда я очищаю текстовое поле, он не сбрасывает dataGrid, чтобы отобразить всю таблицу.dataGrid поиск с sql LIKE-запрос не работает как он должен

Мой XAML:

<DataGrid x:Name="dataGridSearch" HorizontalAlignment="Center" VerticalAlignment="Top" Height="227" Width="990" Margin="0,202,0,0" ItemsSource="{Binding DataSource}" AutoGenerateColumns="False" IsReadOnly="True"> 
        <DataGrid.Columns> 
         <DataGridTextColumn Header="Name" Binding="{Binding name}" Width="200" /> 
         <DataGridTextColumn Header="Type" Binding="{Binding type}" Width="300"/> 
         <DataGridTextColumn Header="City" Binding="{Binding city}" Width="250" /> 

         <DataGridTextColumn Header="Place" Binding="{Binding place}" Width="*" /> 


        </DataGrid.Columns> 
       </DataGrid> 

Мой код для TextChanged события:

using (SqlConnection sc = new SqlConnection(ConString)) 
     { 
      sc.Open(); 
      string query_search = "SELECT * FROM object WHERE name LIKE @name AND type LIKE @type AND city LIKE @city AND place LIKE @place"; 
      SqlCommand com = new SqlCommand(query_search, sc); 
      com.Parameters.AddWithValue("@name", "%" + textBoxPlace.Text + "%"); 
      com.Parameters.AddWithValue("@type", "%" + textBoxType.Text + "%"); 
      com.Parameters.AddWithValue("@city", "%" + textBoxCity.Text + "%"); 
      com.Parameters.AddWithValue("@place", "%" + textBoxPlace.Text + "%"); 


      using (SqlDataAdapter adapter = new SqlDataAdapter(com)) 
      { 
       DataTable dt = new DataTable(); 
       adapter.Fill(dt); 
       dataGridSearch.ItemsSource = dt.DefaultView; 
      } 
      sc.Close(); 
     } 

Кроме того, при открытии окна, у меня есть метод, который заполняет DataGrid в начале

public void fillGrid() 
    { 

     using (SqlConnection sc = new SqlConnection(ConString)) 
     { 
      sc.Open(); 
      string query = "SELECT * FROM object"; 
      SqlCommand com = new SqlCommand(query, sc); 

      using (SqlDataAdapter adapter = new SqlDataAdapter(com)) 
      { 
       DataTable dt = new DataTable(); 
       adapter.Fill(dt); 
       adapter.Update(dt); 
       // dataGridSvi.AutoGenerateColumns = false; 

       dataGridSearch.ItemsSource = dt.DefaultView; 
      } 
      sc.Close(); 
     } 
    } 

ответ

1
com.Parameters.AddWithValue("@name", "%" + textBoxPlace.Text + "%"); 
com.Parameters.AddWithValue("@type", "%" + textBoxType.Text + "%"); 
com.Parameters.AddWithValue("@city", "%" + textBoxCity.Text + "%"); 
com.Parameters.AddWithValue("@place", "%" + textBoxType.Text + "%"); 

проверить свои текстовые поля, и дважды вызывайте один и тот же текст. может быть, это проблема

ой и о сбросить сетку, вы можете просто позвонить fillGrid() еще один раз, когда все текстовые поля будет ясно

+0

это просто опечатка для stackoverfow question.i есть все введён в моем коде.sorry для typo.также он выглядит так, что для некоторых полей из базы данных он работает fine.but для некоторых это не – Alexander

+0

ОК, и если вы делаете это с 'button'? не с 'textchange event' ?? можете ли вы отправить точный код? – Noah

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

  • Нет связанных вопросов^_^