【问题标题】:Record does not filtered properly in my DataGridView.记录未在我的 DataGridView 中正确过滤。
【发布时间】:2014-02-22 08:26:47
【问题描述】:

我有这样的数据库:

当我在文本框中用 “Jaya Raya Motor” 关键字搜索公司名称时,结果是这样的:

但是当我在文本框中用 "Jaya" 关键字搜索公司名称时,结果没有显示任何内容。

我很困惑,这怎么可能?因为第一个关键字是“Jaya”,而完整的关键字是“Jaya Raya Motor”,它应该会显示结果,但现在不是。

我该如何解决这个问题?

代码如下:

private void GetData(object sender, EventArgs e)
        {
            if (_choice.comboBox1.Text == "English")
            {
                if (string.IsNullOrWhiteSpace(textBox1.Text))
                {
                    System.Media.SoundPlayer _sound = new System.Media.SoundPlayer(@"C:\Windows\Media\Windows Exclamation.wav");
                    _sound.Play();
                    MessageBox.Show("Please enter a character or more!", "Error");
                }

                else
                {
                    using (OleDbConnection conn = new OleDbConnection(connectionString))
                    {
                        string query = "SELECT [ProductCode], [Quantity], [Description], [SubTotal], [Total], [IssuedBy], [To], [Times] FROM [TransRecord] WHERE [To] = @To ORDER BY [To]";

                        conn.Open();

                        using (OleDbCommand cmd = new OleDbCommand(query, conn))
                        {
                            cmd.Parameters.Add("@To", System.Data.OleDb.OleDbType.VarChar);
                            cmd.Parameters["@To"].Value = this.textBox1.Text;

                            using (OleDbDataAdapter _adapter = new OleDbDataAdapter(cmd))
                            {
                                _ds.Clear();
                                _adapter.Fill(_ds, "TransRecord");
                                dataGridView1.DataSource = null;
                                dataGridView1.Refresh();
                            }

                            dataGridView1.DataSource = _ds.Tables[0];
                            dataGridView1.ClearSelection();

                            conn.Close();
                        }
                    }
                }
            }
        }

有什么帮助吗?谢谢!

您的回答将不胜感激!

【问题讨论】:

    标签: c# sql-server winforms datagridview


    【解决方案1】:

    您只是在搜索完全匹配的内容。您可能需要使用SubStringLike

    将查询中的WHERE [To] = @To 替换为以下内容。

    WHERE [To] LIKE LIKE % @To %
    

    Check this for more info

    【讨论】:

      【解决方案2】:

      问题:您正在使用带有相等= 运算符的WHERE 子句与公司名称进行比较。 如果您将 WHERE 与 equal 运算符一起使用,它只会返回完全匹配的记录。

      解决方案:您应该使用带有通配符的LIKE 运算符而不是等于运算符来实现搜索功能。

      试试这个:

      string query = "SELECT [ProductCode], [Quantity], [Description], [SubTotal], [Total], [IssuedBy], [To], [Times] FROM [TransRecord] WHERE [To] LIKE @To ORDER BY [To]"; 
      cmd.Parameters["@To"].Value = "%"+this.textBox1.Text+"%";
      

      【讨论】:

      • 我已经尝试过您的代码先生,但不幸的是我收到了一个错误,并且错误说,syntax error in FROM clause
      【解决方案3】:

      您正在使用相等运算符:

      WHERE [To] = @To

      因此,字符串“Jaya”永远不会返回值为“Jaya Raya Motor”的记录的结果。在这种情况下,您要查找以“Jaya”开头的记录。 SQL 支持类似查询:http://www.w3schools.com/sql/sql_like.asp。它会减慢您的查询速度,并且取决于数据库引擎可能会或可能不会使用您为该字段定义的索引。但是,它会产生您期望的结果。你正在寻找这个:

      WHERE [TO] like 'JAYA%'
      

      这将返回 TO 以“JAYA”开头的所有记录

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多