【问题标题】:Filtering DataGridView with TextBox (C#)使用 TextBox 过滤 DataGridView (C#)
【发布时间】:2015-03-27 21:25:05
【问题描述】:

我正在尝试使用文本框过滤我的 dgv(通过数据库)。

我遇到的问题是,当我在文本框中输入有效的项目名称时,我收到一个错误,告诉我我没有在文本框中输入有效的列名......这很奇怪...... .因为我很确定我让它按名称查找项目,而不是查找列:/

这是我的代码:

     private void button3_Click(object sender, EventArgs e)
        {
        //CLEAR CURRENT DATA IN DGV
        datagridview1.Rows.Clear();
        datagridview1.Refresh();

        Connection();
        sqlconnection.Open();

        using (sqlcmd = new SqlCommand("SELECT * FROM inventory_table WHERE Item= " + searchbox.Text, sqlconnection))
        {
           using (SqlDataReader sqldr = sqlcmd.ExecuteReader())
           {
                while (sqldr.Read())
                {
                    datagridview1.Rows.Add(new object[]{
                    sqldr.GetValue(sqldr.GetOrdinal("Item")),
                    sqldr.GetValue(sqldr.GetOrdinal("Quantity")),
                    sqldr.GetValue(sqldr.GetOrdinal("id")),
                });
                }

                sqldr.Close();
            }
        }
        sqlconnection.Close();
    }

我该如何解决这个问题?

【问题讨论】:

  • 代码对我来说看起来不错...调试并查看搜索框中的值是什么
  • @Rusty 就是这样,我已经尝试了几乎所有我可以弥补的东西:/ 它唯一有效的时候是我输入一个有效的数据库表列名。但是如果我输入一个有效的项目名称,它就不起作用了。
  • 你应该使用SQL parameters
  • @Otiel 参数有效:) 谢谢!
  • @Otiel 是正确的,SQL 参数是执行此操作的正确方法。但是您之前遇到该错误的原因是因为您没有将 searchBox.Text 嵌入单引号中。所以应该是Item = '" + searchBox.Text = "'"

标签: c# database winforms datagridview


【解决方案1】:

您可能在 SQL 读取中引用了错误的列名:

sqldr.GetValue(sqldr.GetOrdinal("id")), // Check that "id" and other columns are correct.

仔细检查这些列引用的拼写和大小写与数据库中的内容。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-04-10
    • 2020-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-20
    相关资源
    最近更新 更多