【问题标题】:c# search input for datagridc# 搜索数据网格的输入
【发布时间】:2018-01-26 09:41:35
【问题描述】:

我想用我的textBox 搜索我的datagridViewn。我现在已经完成了,但只是在数据库中使用了“名称”。我需要相同的文本框来搜索“name”或“DataCad”(datacad 是 DateTime 类型)或“city”。我的桌子上有所有这些字段。

如果用户键入“John”,所有具有此名称的用户都会显示在网格上。 (已经使用该名称)。如果用户提示“12/08/2017”,它将显示当天的所有数据。与“城市”相同。

这可能吗?这是我使用名称的代码:

if (!string.IsNullOrEmpty(txtSearch.Text))
            {
                pacientesBindingSource.Filter = string.Format("Nome LIKE '*{0}*'", txtSearch.Text);

            }

【问题讨论】:

  • 我不熟悉这种方法,但似乎将Nome LIKE '*{0}*' 更改为Nome LIKE '*{0}*' OR City LIKE '*{0}*' 应该可行。 DateTime 有点棘手,因为您正在将字符串与 DateTime 进行比较 - 答案取决于您的所有 DateTime 的时间是否为 00:00:00.000 等,但请尝试使用 OR 将所有字段链接在一起
  • 我无法关闭这个浏览器窗口而不警告你一个叫做 SQL 注入 的小东西。请在继续使用您的代码之前检查此链接:https://stackoverflow.com/questions/35163361/how-can-i-add-user-supplied-input-to-an-sql-statement
  • 谢谢你的朋友。去看看这个,
  • string.Format("Nome LIKE '{0}' OR DataCad = '{1}' OR City LIKE '{ 2}'", txtSearch.Text, txtSearch.Text, txtSearch.Text);我觉得这就是?你可以试试

标签: c# search datagridview


【解决方案1】:

我不确定您的其余代码是如何运行的,但看起来 Filter 属性是 where 子句。我相信您可以像这样为 DataCad 字段添加 OR:

string.Format("Nome LIKE '*{0}*' OR Cast(DataCad as date) = Cast('{0}' as date) OR City LIKE '*{0}*'", txtSearch.Text);

【讨论】:

  • 击败我,但我认为您不能将 LIKE 运算符与 DateTime 一起使用(至少在 SQL Server 世界中......)
  • 啊,我错过了 DataCad 是日期字段的部分。我会修改答案,但我不喜欢它:)
  • 是的。我收到一条错误消息,提示“LIKE”不能与 dateTime 一起使用。
  • 是星号吗?尝试从 Cast 调用中删除它们:string.Format("Nome LIKE '{0}' OR Cast(DataCad as date) = Cast('{0}' as date) OR City LIKE '{0}'", txtSearch.Text);
  • 同样的错误没有星号。表达式上的未定义 Cast()。
猜你喜欢
  • 2015-04-24
  • 1970-01-01
  • 2019-11-11
  • 2013-12-17
  • 2013-05-10
  • 2017-10-03
  • 1970-01-01
  • 2023-03-10
  • 2012-09-27
相关资源
最近更新 更多