使用sql LIKE查询的dataGrid搜索不能正常工作

时间:2016-12-23 12:39:56

标签: c# sql datagrid

我的app中有一个dataGrid。我正在使用TextChanged事件来过滤数据网格。我有四个文本框用于过滤。我正在使用LIKE的SQL查询。 当我使用只有两个文本框的过滤器时,此方法可以正常工作。但如果我使用四个中的四个(因为我需要四个),它不会正确过滤数据网格。它不会显示所有匹配项,当我清除文本框时,它不会重置dataGrid以显示整个表格。

我的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 个答案:

答案 0 :(得分: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()