![](/img/trans.png)
[英]Filtering Empty DataGridView through TextBox (C#, WinForms)
[英]C# Winforms Listbox filtering Datagridview by Date
所以,我有一个 excel 文件,其中列“结算日期”,格式为:dd/mm/yyyy。 我通过“日期”格式中的 SQL 列发送此内容,其中格式在 yyyy-mm-dd 中自动更改。 然后,当我将此 SQL 列发送到 C# Winforms 列表框时,使用:
SqlCommand cmd = new SqlCommand(sqlStr, conn);
SqlDataReader rd = cmd.ExecuteReader();
while (rd.Read())
{
mylistbox.Items.Add(rd[0]);
}
日期再次以 dd/mm/yyyy 显示(与我在 excel 上的格式相同),最终当我尝试使用刚刚填充的列表框按结算日期过滤 datagridview 时,我收到以下错误消息:
"Conversion failed when converting date and/or time from character string".
到目前为止我读了一些东西,但我在这里有点困惑,我应该直接将格式从开始(excel表)更改为 SQL 服务器,或者可能在 SQL 中从格式“日期”更改为“字符串”并在 winform 中更改一次,只是排序,因为它会是一个字符串?
如果听起来不是很清楚,或者您需要更多信息,请告诉我
干杯
问题可能是 SQL 数据读取器将您的日期列解释为字符串而不是日期,因为 Excel 电子表格没有任何类型的固有架构,因此 Z9778840A0100CB30C9822Z 在特定列中查看数据读取器中第一行的值并推断数据类型。 尝试更改填充列表框的逻辑
{
mylistbox.Items.Add(rd[0]);
}
至
{
DateTime dt;
if (!rd[0] is DateTime) {
if (DateTime.TryParse(rd[0], out dt) {
mylistbox.Items.Add(dt.ToString("yyyy-MM-dd"));
}
} else {
mylistbox.Items.Add(rd[0].ToString("yyyy-MM-dd"));
}
}
错误消息表明您尝试过滤的 gridview 列绑定到 DateTime 值,但您使用的列表框 select 您的过滤值包含一个字符串值(如果您使用上面的代码,它将是)。 您没有包含引发错误的代码,因此这只是一个假设。 当您将过滤值应用于 gridview 时,请务必将过滤值转换为正确的数据类型 - 不要依赖隐式转换为您执行此操作。
感谢@Dave Holden,我了解到我的 SQL SERVER 的日期为英文,而我的 windows 应用程序(Excel、C# winform/UE)以法语格式显示日期。 我需要使用的代码,以便在 sql 服务器美国格式中过滤时,我可以在列表框和 datagridview 中显示法语/UE 格式:
C#
foreach (var li in lb.SelectedItems)
{
DateTime dt;
if (li.GetType() == typeof(DateTime))
{
if (DateTime.TryParse(li.ToString(), out dt))
{
strCondition += $"'{dt:yyyy-MM-dd}',";
}
}
else
{
strCondition += $"'{li}',";
}
}
所以我实际上在每个列表框中循环,我得到每个选定的项目。 我知道它可以是字符串或日期/日期时间,所以选择的项目是日期/日期时间然后我把它变成字符串(TryParse 的第一个参数必须是一个字符串)最终在纯日期时间中有 output 我将应用于它是在 SQL 服务器中工作的“yyyy-mm-dd”。 因此,我的用户的日期以法语显示,但应用程序将连接到 SQL 过滤美国日期。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.