如何使用文本框在数据网格视图中搜索数据

Posted

技术标签:

【中文标题】如何使用文本框在数据网格视图中搜索数据【英文标题】:How to use textbox to search data in data grid view 【发布时间】:2019-06-07 11:41:13 【问题描述】:

假设您有一个表,并且您想要过滤任何类型的数据。我希望显示与此值相关的整行,例如,日期、名称、描述、值,仅过滤 1 个表字段

string filter = "";
string command = "SELECT * FROM Movimentos WHERE [Tipo de Movimento] = 'Crédito'";


if (textDataMovimento.Text != "")

    filter = filter + "[Data Movimento] LIKE '%" + textDataMovimento.Text + "%' AND";

if (textDataValor.Text != "")

    filter = filter + " [Data Valor] LIKE '%" + textDataValor.Text + "%' AND";

if (textDescricao.Text != "")

    filter = filter + " [Descrição] LIKE '%" + textDescricao.Text + "%' AND";

if (textValor.Text != "")

    filter = filter + " [Valor] LIKE '%" + textValor.Text + "%' AND";

if (textTipodeMovimento.Text != "")

    filter = filter + "[Tipo de Movimento] LIKE  '%" + textTipodeMovimento.Text + "%'AND";

【问题讨论】:

注意SQL注入,改用参数 我是来寻求帮助的,我是新来使用这种语言的,只用了几天时间 只需将您的参数传递给您的查询并使用ISNULL(Param, Column) 这样您就不需要检查文本框是否为空。老实说,我不知道 C#。过滤器属性很难,因为您需要检查每个文本框是否输入AND,只需使用查询参数即可。 我指的是我在您的其他帖子上发表的评论(在不同的帐户上?):“您所追求的是SqlCommand.Parameters Property。SQL 命令的参数化非常重要。如果你不熟悉它,我建议阅读SQL Injection。” 另外你在"SELECT * FROM Movimentos WHERE [Tipo de Movimento] = 'Crédito'"的决赛中错过了AND。想象一下只有textDataMovimento.Text != ""为真,那么查询将是"SELECT * FROM Movimentos WHERE [Tipo de Movimento] = 'Crédito' [Data Movimento] LIKE '%valueoftextbox%' AND",它是无效的,会抛出错误。 【参考方案1】:

一些很有帮助的提示,虽然我不认为这些会是你想要的答案,但它们应该会给你一些关于良好应用程序设计的指导......

    切勿将 UI 代码与数据层代码混用(查看 N 层架构) 应该避免 SQL 注入,或许可以考虑使用 ORM 将控件绑定到对象应该比直接从 DB 中获取数据值更可取(阅读“关注点分离”。

虽然可能更接近您的预期目标......

考虑使用“LINQ to SQL”之类的东西......它允许您的 C# 成为 C#,并且底层框架将以“安全”的方式处理您对数据库的查询生成。

至于将数据实际绑定到网格以呈现结果,请考虑其中一些选项...

https://www.google.com/search?q=binding+a+datagrid+view+to+an+object+collection

...

最后说明

我知道这可能会给您带来更多问题,并且可能不是本意,但我认为需要提出很多关于此实现的内容,以便您改进使用此技术的方式,以避免软件开发中的常见陷阱。

【讨论】:

【参考方案2】:

只需准备一个动态 sql 原始查询,即可根据匹配列值搜索匹配行。

注意:永远不要在原始查询中直接使用参数值,始终使用 sql 参数来传递值。这有助于避免 sql 注入。

【讨论】:

以上是关于如何使用文本框在数据网格视图中搜索数据的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 sql 查询使用注册日期列搜索网格视图

通过消除除 seacrhed 行之外的所有其他行,通过文本框在已填充的列表视图中搜索

如何从 SQL 数据库编辑网格视图中显示的数据

使用Umbraco 7.2网格视图,如何将网格视图插入模板?

仅选择一行后如何更改数据网格中的文本,FLEX

如何使用作为迭代器的训练数据进行 scikit-learn 网格搜索