如何创建搜索框?

时间:2011-11-11 23:45:43

标签: c# .net database search ms-access-2010

现在我花了几个小时试图解决问题,谷歌搜索和阅读论坛,但我没有找到答案!

我需要制作某种商业应用程序"作为我学校的一个项目,我需要对公司的客户进行概述。 我正在使用Microsoft Visual C#2010 Express和Access 2010,并使用OleDb在C#中编写。

我的问题是:

如何为应用程序创建搜索框/表单以搜索访问数据库(.accdb)中的信息。 我想使用一个文本框,我从我的数据库中写一些东西,例如公司的名字,然后按下搜索按钮。现在它应该写下所有与公司名称相关的信息,可以在DataGrid的数据库中找到。

也许这个项目太大了,所以如果有人做了一个不那么复杂的搜索功能,我也会很感激。

这里是代码,填写错误.Fill(数据集," Food");. InvalidOperationException未处理。填充:SelectCommand.Connection尚未初始化。 只需使用一个名为" Food"的表来测试一个简单的访问数据库。食物ID,食物名称和价格。

private void button1_Click(object sender, RoutedEventArgs e)
    {
        GetCustomers(textBox1.Text);
    }
        // Load Data from the DataSet into the DataGridView
        private void GetCustomers(string searchTerm)
        {
            DataSet dataset = new DataSet();
            using (OleDbConnection connection = 
            new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\Niclas\Desktop\Skole\Programmering\Database\Food.accdb;Persist Security Info=False;"))
            {
                OleDbDataAdapter adapter = new OleDbDataAdapter();
                adapter.SelectCommand = new OleDbCommand(
                "select * from Food where FoodID like ('" + searchTerm + "', connection");
                adapter.Fill(dataset, "Food");
            }

        // Get the table from the data set and bind the data to the grid
        this.dataGrid1 = new System.Windows.Controls.DataGrid();

        dataGrid1.DataContext = dataset.Tables[0];

        }
     }

2 个答案:

答案 0 :(得分:1)

您可以发布不起作用的代码吗?

基本上在搜索按钮的单击事件上,您将调用一个函数来填充DataGridView,例如:

GetCustomers(textBox1.Text);


// Load Data from the DataSet into the DataGridView
private void GetCustomers(string searchTerm)
{
DataSet dataset = new DataSet();
using (OleDbConnection connection = 
    new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\myFolder\myAccess2007file.accdb;Persist Security Info=False;"))
  {
    OleDbDataAdapter adapter = new OleDbDataAdapter();
    adapter.SelectCommand = new OleDbCommand(
        "select * from customer where name like %" + searchTerm + "%", connection);
    adapter.Fill(dataset, "Customers");
  }

    // Get the table from the data set and bind the data to the grid
    DataGridView.DataSource = dataset.Tables[0];
}

我在这台电脑上没有Visual Studio,因此可能存在语法错误,但这应该可以帮助您入门。

答案 1 :(得分:1)

当我作为实习生工作时,我做了类似的事情。我解决这个问题的方法是为我正在搜索的每种类型的数据创建一个表单,然后在附加到数据网格视图的BindingSource上运行一个过滤器。我添加的另一个简洁的触摸是这个过滤器在按键上运行,所以它在您输入时自动运行。

我有一个像这样的方法(这已经从VB转换):

private void Search()
{
    string[] strSplitString = null;
    string strSearchString = "";
    strSplitString = Strings.Split(txtSearch.Text.Trim);

    // Check to see if there are any strings
    if (strSplitString.Count == 1) {
        // Construct the search string
        strSearchString = "FirstName Like '%" + strSplitString[0] + "%' Or MiddleName Like '%" + strSplitString[0] + "%' Or LastName Like '%" + strSplitString[0] + "%'";

    } else if (strSplitString.Count > 1) {
        // Construct the string
        strSearchString = "(FirstName Like '%" + strSplitString[0] + "%' Or MiddleName Like '%" + strSplitString[0] + "%' Or LastName Like '%" + strSplitString[0] + "%')";

        // For each word add it to the search string
        for (intWord = 1; intWord <= (strSplitString.Count - 1); intWord++) {
            strSearchString += " And (FirstName Like '%" + strSplitString[intWord] + "%' Or MiddleName Like '%" + strSplitString[intWord] + "%' Or LastName Like '%" + strSplitString[intWord] + "%')";
        }
    }

    // Filter the binding source
    BindingSource.Filter = strSearchString;
}

可能有更好的方法,但这个项目也反对一个相当大的访问数据库,似乎工作得很好