SQL Server& C#:filter for System.Date - 仅在00:00:00生成条目

时间:2015-06-19 11:30:02

标签: c# sql sql-server visual-studio filter

我在Visual Studio中有一个连接的SQL Server数据库,并在网格中显示其内容。我创建了一个下拉菜单,其中列名称为可选选项,文本字段用于过滤特定内容,例如,DropDown =“Start” - Textfield = 14.03.2015 =筛选列“开始”,表示包含“14.03.2015”的每个条目“ - 并将其显示在网格中。

我基本上完成了那部分。我所面临的唯一问题是每当我输入日期时 - 例如,14.03.2015它只显示从00:00:00开始的日期 - 其他不在00:00:00开始的条目将被忽略,我无法弄清楚如何修改它才能正常工作。

网格看起来像这样:http://abload.de/img/untitled123yqkyn.png

我正在使用以下C#代码进行过滤:

protected void Button1_Click(object sender, EventArgs e)
{
    string FilterExpression = string.Empty;

    if (DropDownList1.SelectedValue.ToString().Equals("Start"))
    {
        FilterExpression = string.Format("Start  = '{0}'", TextBox1.Text);
    }
    else if (DropDownList1.SelectedValue.ToString().Equals("End"))
    {
        FilterExpression = string.Format("End  = '{0}'", TextBox1.Text);
    }
    else if (DropDownList1.SelectedValue.ToString().Equals("Creation Time"))
    {
        FilterExpression = string.Format("DateTimeCreated = '{0}'", TextBox1.Text);
    }
    else if (DropDownList1.SelectedValue.ToString().Equals("Last Modified"))
    {
        FilterExpression = string.Format("LastModifiedTime = '{0}'", TextBox1.Text);
    }
    else
    {
        FilterExpression = string.Concat(DropDownList1.SelectedValue, " Like '%{0}%'");
    }

    SqlDataSource1.FilterParameters.Clear();
    SqlDataSource1.FilterParameters.Add(new ControlParameter(DropDownList1.SelectedValue, "TextBox1", "Text"));
    SqlDataSource1.FilterExpression = FilterExpression;
}

请原谅代码的质量,我对C#完全不熟悉,也就是编程本身。我希望有人能够帮助我。

1 个答案:

答案 0 :(得分:0)

在日期字段上使用强制转换语句删除时间部分,如下所示:

FilterExpression = string.Format("CAST(Start  AS DATE) = '{0}'", TextBox1.Text);
FilterExpression = string.Format("CAST(End    AS DATE) = '{0}'", TextBox1.Text);
FilterExpression = string.Format("CAST(End    AS DATE) = '{0}'", TextBox1.Text);
FilterExpression = string.Format("CAST(LastModifiedTime   AS DATE) = '{0}'", TextBox1.Text);

此外,如果您的输入是日期,请尝试:

FilterExpression = string.Format("CONVERT(date,Start) = '{0}'", TextBox1.Text);
FilterExpression = string.Format("CONVERT(date,End) = '{0}'", TextBox1.Text);
FilterExpression = string.Format("CONVERT(date,End) = '{0}'", TextBox1.Text);
FilterExpression = string.Format("CONVERT(date,LastModifiedTime) = '{0}'", TextBox1.Text);

最后但并非最不重要的是,如果你的输入是varchar,那么试试这个:

FilterExpression = string.Format("CONVERT(varchar,Start,101) = '{0}'", TextBox1.Text);
    FilterExpression = string.Format("CONVERT(varchar,End,101) = '{0}'", TextBox1.Text);
    FilterExpression = string.Format("CONVERT(varchar,End,101) = '{0}'", TextBox1.Text);
    FilterExpression = string.Format("CONVERT(varchar,LastModifiedTime,101) = '{0}'", TextBox1.Text);