【问题标题】:SQL Datagrid Filtering in C#C# 中的 SQL 数据网格过滤
【发布时间】:2015-09-04 01:00:50
【问题描述】:

我在 Visual Studio 中有一个连接的 SQL 数据库,并在网格中显示它的内容。 我创建了一个下拉菜单,其中列名称作为可选选项和一个文本字段来过滤特定内容,例如,DropDown = "Start" - Textfield = 14.03.2015 = Filter Column "Start" for each entry that contains "14.03.2015 " - 并将其显示在 Grid 中。

我基本上已经完成了那部分。我面临的唯一问题是每当我输入日期时 - 例如,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# 和编程本身是完全陌生的。 我希望有人能帮助我。

【问题讨论】:

  • 要清理您的代码,请考虑为您的 DropDownList 使用enum。此外,请使用 switch 语句而不是所有那些 if else 语句。
  • 您好,感谢您的回复。我会确保在我的代码正常工作后立即清理它。
  • 我还建议为您的对象命名。 Button1、DropDownList1 毫无用处,当您在给定屏幕上获得多个控件时,它们将成为一场噩梦。
  • 好吧,我只有两个按钮,一个文本字段和一个 DropDownMenu。不会有比目前更多的功能,所以我认为我很好。不过还是谢谢你的建议。
  • 是否可以运行一些需要指定日期的代码,例如2015 年 3 月 15 日,然后找到当天的开始和结束时间,例如15:03:2015 00:00:01 和 15:03:2015 23:59:59 可能存储为一个元组,然后带回该元组范围内的每个结果?

标签: c# sql sql-server gridview filter


【解决方案1】:

我可以让日期过滤(和排序)与 datagridview 控件一起使用的唯一方法是将列类型显式设置为 DateTime。您可以在设计器中执行此操作,也可以在添加列时动态执行此操作,使用 typeof(DateTime),如下所示:

column.ValueType = typeof(DateTime);

如果您不这样做,那么过滤和排序会将列视为纯文本。

【讨论】:

  • 我现在有点迷茫。我的代码有哪些必要的更改?我在 .aspx 中生成我的 Grid 我已经获得了日期,但只有从 00:00:00 开始的日期。我确信有一个简单的方法,但我就是想不通。
  • 启用网格排序,按日期列排序。如果日期“正确”排序,即按日期顺序,那么它已经是一个日期列。如果日期按字母数字排序,则这是一个文本列,需要更改。说了这么多,我认为您的问题可能取决于您的过滤方式,如上所述?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-12-03
  • 1970-01-01
  • 2012-08-07
  • 2020-02-21
  • 2011-06-28
  • 2016-07-23
  • 1970-01-01
相关资源
最近更新 更多