首页 > 解决方案 > C#如何在datagridview中显示datetimepicker中选定的日期值

问题描述

更准确地说。这是我正在努力实现的目标。我的数据库有带有日期值的日期列,现在我有一个 datetimepicker,如果我选择一个日期,比如说 2018 年 8 月 21 日,所有日期为 8 月 21 日的行都应该只显示。我需要帮助来做这些,我真的不知道我该怎么做。谢谢

这是我尝试过的提供的代码,但它不起作用

PS:日期列在我的数据库中是 varchar 数据类型

public partial class SIMSSupplier : UserControl
{
    ADDSupplier supply;
    ADDPReturns returns;
    public SIMSSupplier()
    {
        InitializeComponent();

    }
    public DataTable dbdataset;
   private void FillSupplier(DataGridView grid, string request)
    {
        using (var con = SQLConnection.GetConnection())
        using (var select = new SqlCommand(request, con))
        using (var sda = new SqlDataAdapter())
        {
            dbdataset = new DataTable();
            sda.SelectCommand = select;
            sda.Fill(dbdataset);
            grid.DataSource = new BindingSource() { DataSource = dbdataset };
            sda.Update(dbdataset);
        }
    }
 private void DateReturn_ValueChanged(object sender, EventArgs e)
    {
       var dv = new DataView(dbdataset);
        dv.RowFilter = string.Format("Date LIKE '%{0}%'", DateReturn2.Value);
        PurchaseReturn.DataSource = dv;
    }
}

标签: c#winforms

解决方案


我会说只有一个解决方案,我会解释为什么。

问题是您的日期在数据库中的格式为varchar,解决方案是将其更改为datedatetime

您必须更改它的原因是因为当您以格式将日期传递给数据库时,varchar您可能会从一个函数中传递它,然后dd/MM/yyyy从另一个函数传递它MM/dd/yyyy,然后在数据库中,您将有 2 个不同格式的日期,这是无法过滤的通过。

我之所以说这是唯一的解决方案是因为即使您使用自定义函数解决了这个问题,您也会遇到两个问题:

  • 下次使用该数据库中的一些数据时,您会遇到同样的问题
  • 您会在代码中混淆,当您遇到如此多的自定义函数和扩展时,您会忘记您是如何命名/使用那个的,当您使用谷歌搜索时,如何解决无处不在的问题将是已经存在的解决方案.Net或其他东西否则,您将无法解决该问题。

推荐阅读