2015-06-22 3 views
0

У меня есть связанная база данных SQL Server в Visual Studio и я показываю ее содержимое в сетке. Я создал раскрывающееся меню с именами столбцов в качестве выбираемых параметров и текстовое поле для фильтрации для определенного контента, например DropDown = «Пуск» - Textfield = 14.03.2015 = Фильтрация столбца «Пуск» для каждой записи, которая содержит «14.03.2015 "- и отобразите его в сетке.SQL Server/C#: Фильтр для System.Date - только результаты только в 00:00:00

Я в основном с этой частью. Единственная проблема, с которой я столкнулся, - это когда я вводил дату - например, 14.03.2015, она отображает только даты, которые начинаются в 00:00:00 - другие записи, которые не начинаются в 00:00:00, игнорируются и Я не могу понять, как изменить это для правильной работы.

Сетка выглядит следующим образом: http://abload.de/img/untitled123yqkyn.png

И я использую следующий код С # для фильтрации:

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; 
} 

Это моя Сетка:


Организатор Номер Время создания Начало Конец Последнее изменение  

<asp:TextBox ID="TextBox1" runat="server" Width="315px"></asp:TextBox> &nbsp; 
    <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Search" Width="100px"/> &nbsp; 
    <asp:Button ID="Button2" runat="server" OnClick="Button2_Click" Text="Reset Search" Width="100px"/> 
    <br/> 
    <br/> 

    <asp:GridView ID="GridView1" runat="server" BorderColor="#F9F9F9" BorderStyle="Solid" CellPadding="4" ForeColor="#333333" AutoGenerateColumns="False" DataKeyNames="ID" DataSourceID="SqlDataSource1" AllowSorting="True" pagesize="1000" AllowPaging="True" HorizontalAlign="Center"> 
    <AlternatingRowStyle BackColor="White"/> 

     <Columns> 
     <asp:BoundField DataField="ID" HeaderText="ID" InsertVisible="False" ReadOnly="True" SortExpression="ID" ItemStyle-HorizontalAlign="Center"/> 
     <asp:BoundField DataField="Organizer" HeaderText="Organizer" SortExpression="Organizer" ConvertEmptyStringToNull="False" HtmlEncode="False" HtmlEncodeFormatString="False" InsertVisible="False"/> 
     <asp:BoundField DataField="Room" HeaderText="Room" SortExpression="Room"/> 
     <asp:BoundField DataField="DateTimeCreated" HeaderText="Creation Time" SortExpression="DateTimeCreated"/> 
     <asp:BoundField DataField="Start" HeaderText="Start" SortExpression="Start" /> 
     <asp:BoundField DataField="End" HeaderText="End" SortExpression="End"/> 
     <asp:BoundField DataField="LastModifiedTime" HeaderText="Last Modified" SortExpression="LastModifiedTime" /> 
     <asp:CheckBoxField DataField="Cancelled" HeaderText="Cancelled" SortExpression="Cancelled" ItemStyle-HorizontalAlign="Center" /> 
     </Columns> 

    <EditRowStyle BackColor="#2461BF"/> 
    <FooterStyle BackColor="#E1000F" Font-Bold="True" ForeColor="White"/> 
    <HeaderStyle BackColor="#E1000F" Font-Bold="True" ForeColor="White" Font-Underline="false"/> 
    <PagerStyle BackColor="#E1000F" ForeColor="White" HorizontalAlign="Center"/> 
    <RowStyle BackColor="#F9F9F9"/> 
    <SelectedRowStyle BackColor="#D1DDF1" Font-Bold="True" ForeColor="#333333"/> 
    </asp:GridView> 

    <asp:SqlDataSource ID="xyz" runat="server" ConnectionString="<%$ ConnectionStrings:VCConnectionString %>" SelectCommand="SELECT * FROM [xyz]"></asp:SqlDataSource> 
</center> 

Пожалуйста, простите за качество кода, я совершенно новой для C# и для этого вещества программирования само по себе. Надеюсь, что кто-то может мне помочь.

+0

Вы должны удалить один тег между mysql и sql-сервером, они столкнулись с – Simone

+0

. Я использовал рекомендуемые теги. – Andre

ответ

1

Что произойдет, если изменить все фильтров использовать «LIKE»:

if (DropDownList1.SelectedValue.ToString().Equals("Start")) 
{ 
    FilterExpression = string.Format("Start LIKE '{0}%'", TextBox1.Text); 
} 

Тогда, вы не соответствуете точной дате (в полночь), но сопоставляете любые даты-времени, которые начинаются с с этой датой.

Update

Или, возможно, вы могли бы попробовать это ...

if (DropDownList1.SelectedValue.ToString().Equals("Start")) 
{ 
    FilterExpression = string.Format("Start >= '{0} 0:00:00' AND Start <= '{1} 23:59:59'", TextBox1.Text, TextBox1.Text); 
} 

Update 2

... Или, если вы действительно хотите убедиться, что вы получите все записи из этой последней секунды в 23:59:59, вы могли бы использовать это (я думаю,) ...

if (DropDownList1.SelectedValue.ToString().Equals("Start")) 
{ 
    FilterExpression = string.Format("Start >= '{0} 0:00:00' AND Start < DATEADD(day,1,'{1}')", TextBox1.Text, TextBox1.Text); 
} 

Обратите внимание, что версия выглядит для записей менее вашей определенной даты «плюс один день».

Лично я использовал бы скрипт «Обновить 1» и сравнил даты с 23:59:59, хотя, да, он игнорировал бы записи, созданные в эту последнюю секунду дня (например, в 23:59 : 59,403).

+0

Привет. Когда я это делаю, я получаю исключение: не могу выполнить операцию «Like» на System.DateTime и System.String. – Andre

+0

Yup , справедливая точка. Я изменил свой ответ со вторым предложением ... –

+0

Вы спасли мой день. Спасибо большое! Это отлично поработало. – Andre

0

Проблема связана с тем, что вы фильтруете значение datetime; если вы установите только часть даты, система будет интерпретировать ее как в полночь. Попытайтесь передать также значение времени, и оно будет работать.

EDIT: Проблема обусловлена ​​переходом от строки и даты-времени:

else 
    { 
     FilterExpression = string.Concat(DropDownList1.SelectedValue, " Like '%{0}%'"); 
    } 

Возможно меняющегося вашу логику, чтобы использовать значение как dateime должно работать. В на следующие примере первая не работает, второй делает:

SELECT * 
FROM [Events] 
WHERE EventDate LIKE '%2012-06-08%' 
SELECT * 
FROM [Events] 
WHERE EventDate >= '2012-06-08' AND EventDate <= '2012-06-08 23:59:59' 
+0

Привет, спасибо за ваш ответ. Я знаю, что это сработает. Я хочу, чтобы он показывал все записи того дня. – Andre

+0

'EventDate <= '2012-06-08 23: 59: 59'' - плохая идея - если только вы не хотели исключать события, которые произошли * в течение последней секунды дня (например, в 23: 59: 59.423). Это намного проще * использовать эксклюзивную конечную точку для сравнения - EventDate <'2012-06-09'' –

+0

@Damien_The_Unbeliever Вы правы, но я думал, что было ясно, что время визуализировано, по этой причине я didn' t адаптировать код к его потребностям. Теперь я видел, как кто-то просто скопировал ответ, чтобы использовать мое предложение ненадлежащим образом :( – Simone

 Смежные вопросы

  • Нет связанных вопросов^_^