如何使用文本框在数据网格视图中搜索数据
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 注入。
【讨论】:
以上是关于如何使用文本框在数据网格视图中搜索数据的主要内容,如果未能解决你的问题,请参考以下文章
通过消除除 seacrhed 行之外的所有其他行,通过文本框在已填充的列表视图中搜索