【问题标题】:How to use DATEADD(SQL) in DataView Rowfilter? (C#)如何在 DataView Rowfilter 中使用 DATEADD(SQL)? (C#)
【发布时间】:2016-10-10 06:36:27
【问题描述】:

我正在制作程序以使用 DataGridView 和 ComboBox 选择显示信息。

在SQL中,查询是

SELECT ListID, ListTitle, ListLastModifyDate  WHERE ListLastModifyDate <= DATEADD(MM, -1, GETDATE())

我已经构建了一个代码。

  • 在文本框中输入文本,然后单击开始按钮。

  • DataGridView 中显示的匹配数据

现在我想添加这个..

  • 如果我在 Combobox 中选择项目,所选项目的结果会显示在 DatagridView 中
  • 我想在不更改数据源的情况下显示数据

所以我尝试使用 DataView 的 RowFilter.. 但发现了一些错误。

代码如下

private void mtcbSiteColSearchCondition_SelectedIndexChanged(object sender, EventArgs e)
    {
        DataView dvSiteCol = new DataView(dtSiteCol);

        if (mtcbSiteColSearchCondition.SelectedItem.ToString() == "all")
        {
            mgrdSiteCollections.DataSource = dtSiteCol;
        }
        else
        {
            DateTime lastModifiedDate = DateTime.Now.AddMonths(-1);
            dvSiteCol.RowFilter = string.Format("SiteColLastModifyDate <= {0}",lastModifiedDate.ToString("yyyy/MM/dd"), mtcbSiteColSearchCondition.SelectedItem.ToString());
            mgrdSiteCollections.DataSource = dvSiteCol;
        }
    }

我不确定什么是正确的......

请有人帮助我如何更改该查询...

谢谢

【问题讨论】:

  • 您使用的是哪个 dbms? (Dateadd 是产品特定的功能。)

标签: c# sql datagridview dataview rowfilter


【解决方案1】:

应用 RowFilter 时使用的规则列在 DataColumn 对象的 Expression 属性中。

特别是在过滤 DateTime 值时,您应该将 Date 值括在 # 符号内,并以不变的文化格式表示您的日期

所以你应该写

  dvSiteCol.RowFilter = string.Format("SiteColLastModifyDate <= #{0}#",
                                      lastModifiedDate.ToString("MM/dd/yyyy")); 

不清楚您想对这部分代码做什么。格式表达式中不需要它,因此您应该删除它:,mtcbSiteColSearchCondition.SelectedItem.ToString());

【讨论】:

  • 谢谢史蒂夫。你的代码运行良好!!我找到了另一个解决方案。在 Store Procedure 中,像这样添加 [SiteColLastModifyDate, DATEADD(MM,-1,GETDATE()) as modifiedDate] 和后面的代码: [dvSiteCol.RowFilter = string.Format("SiteColLastModifyDate
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-20
相关资源
最近更新 更多