在整个表中运行搜索

时间:2017-09-15 18:23:56

标签: c# sql dataview

我的程序运行,客户端输入他要查找的内容并在SQL数据库中搜索它。当他点击搜索时,它会出现在datagridview中。

我希望客户输入任何单词,单词的开头或结尾,而不是查看一列,它将在整个表格中查找。

我该如何编程?

clsdatasource.search获取文本框中的内容并将其存储在变量中。

{{1}}

我尝试了什么:

{{1}}

1 个答案:

答案 0 :(得分:0)

试试这个:

public partial class Form1 : Form
{
    DataGridView dataGridView;
    DataTable dataTable;
    DataView dataView;
    TextBox textBoxSearch;

    public Form1()
    {
        //InitializeComponent();

        Width = 400;
        dataGridView = new DataGridView { Parent = this, Dock = DockStyle.Top };
        textBoxSearch = new TextBox { Parent = this, Top = 200 };
        textBoxSearch.TextChanged += TextBoxSearch_TextChanged;

        dataTable = new DataTable();

        dataTable.Columns.Add("Id", typeof(int));
        dataTable.Columns.Add("Name", typeof(string));
        dataTable.Columns.Add("BirthDate", typeof(DateTime));

        dataTable.Rows.Add(1, "Bob", new DateTime(2001, 01, 01));
        dataTable.Rows.Add(2, "John", new DateTime(1999, 09, 09));
        dataTable.Rows.Add(3, "Alice", new DateTime(2002, 02, 02));

        dataView = new DataView(dataTable);
        dataGridView.DataSource = dataView;
    }

    private void TextBoxSearch_TextChanged(object sender, EventArgs e)
    {
        var text = textBoxSearch.Text;

        var values = dataTable.Columns
            .OfType<DataColumn>()
            .Select(c => "Convert([" + c.ColumnName + "], System.String)")
            .Select(c => c + " like '%" + text + "%'");

        var filter = string.Join(" or ", values);

        dataView.RowFilter = filter;
    }
}

要搜索不同类型的所有列,我将它们转换为字符串。然后使用like运算符。最后,与or结合使用。