【问题标题】:DataTable BindingSource to DateGridView FilteringDataTable BindingSource 到 DateGridView 过滤
【发布时间】:2013-12-17 22:05:26
【问题描述】:

我正在尝试编写一些代码来编写基于多个条件的过滤器。在我的应用程序中,我有 2 个日期过滤器和 2 个文本过滤器。 1. 是否可以使用绑定源过滤器属性过滤多个条件?

如果不是这样,我该怎么做呢?

下面是我的代码

private void btnFilter_Click(object sender, EventArgs e)
{
    string strFilter = "";
    string strDateFilter = "Date >" + String.Format("{0:MM/dd/yyyy}", dtBgnDate.Value) + " AND Date < " + String.Format("{0:MM/dd/yyyy}", dtEndDate.Value);
    string strNameFilter;
    string strAcctFilter;
    strFilter = strDateFilter;

    if (!txtLName.Text.Trim().Equals(""))
    {
        strNameFilter = "LName like '%" + txtLName.Text + "%'";
        strFilter = strFilter + " AND " + strNameFilter;
    }

    if (!txtAcctNum.Text.Trim().Equals(""))
    {
        strAcctFilter = "AcctNum = " + txtAcctNum.Text;
        strFilter = strFilter + " AND " + strAcctFilter;
    }

    BindingSource bsource = new BindingSource();
    bsource.Filter = strFilter;
    bsource.DataSource = gvData.DataSource;

}

代码抛出如下异常

EvaluatedException: Cannot perform '>' operation on System.DateTime and Double

【问题讨论】:

  • 你的代码有什么问题?它会过滤,还是抛出任何异常?
  • 我在原消息中添加了异常

标签: c# datagridview bindingsource


【解决方案1】:

过滤日期值时,您必须用尖字符将它们括起来,即#12/31/2008#

因此,更改以下内容:

string strDateFilter = "Date > #" + String.Format("{0:MM/dd/yyyy}", dtBgnDate.Value) + "# AND Date < #" + String.Format("{0:MM/dd/yyyy}", dtEndDate.Value) + "#";

【讨论】:

  • 这次没有异常,但它没有返回任何东西。我将列定义如下:DataTable dt = new DataTable(); DataColumn col = new DataColumn("Date"); col.DataType = System.Type.GetType("System.DateTime"); dt.Columns.Add(col); 或者我应该将日期定义为字符串吗?
猜你喜欢
  • 2014-02-13
  • 2018-05-13
  • 1970-01-01
  • 2014-06-21
  • 1970-01-01
  • 2015-10-20
  • 1970-01-01
  • 1970-01-01
  • 2011-06-18
相关资源
最近更新 更多