Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > BindingSource как установить фильтр на дату


Автор: RastaDja 22.2.2011, 12:30
Доброго времени суток!!!
Помогите разобратся в фильтре, так, как я впервые с этим делом столкнулся, а надо срочно сделать.

Есть BindingSource bind, привязан к DataTable dTbl. В DataTable есть поле Date (поле формата DataTime) и есть календарь dateTimePicker1;
Код

public DataTable dTbl  = new DataTable("Samples");;
BindingSource bind = new BindingSource();
bind.DataSource = dTbl;
//....
dTbl.Columns.Add("Date", typeof(DateTime));


Пишу такой код
Код

string str = dateTimePicker1.Value.ToString();
string strFilter = "Date = '" + str + "'";
bind.Filter = strFilter;


но он не работает, так, как имеет формат "дд.мм.рррр чч:мм:сс".
как мне задать фильтр, чтоб он сортировал по дням, и не учитывал время?

Спассибо! Очень надеюсь на помощь!

Автор: RastaDja 22.2.2011, 14:35
Помогите!!! 

Автор: diadiavova 22.2.2011, 17:32
http://msdn.microsoft.com/ru-ru/library/zdtaw1bw.aspx
http://msdn.microsoft.com/ru-ru/library/az4se3k1.aspx

Автор: RastaDja 24.2.2011, 09:39
diadiavova, там скорее всего не то, ведь я хочу сделать что то приблизительно такое:

bind.Filter = "Date >= 23.23.1990 00:00:00 and Date >= 23.23.1990 23:55:55";

а вот как это сделать?

Добавлено через 24 секунды
или может есть другой вариант?

Автор: MasterOfCode 24.2.2011, 09:48
RastaDja, Составляй дату самостоятельно, если мне не изменяет память, то так:
Код

string s = dateTimePicker1.Value.Year.ToString() + ":" + dateTimePicker1.Value.Month.ToString() + ":" + dateTimePicker1.Value.Day.ToString();

Но лучше все таки вникнуть в то, что написал вам diadiavova.

Автор: diadiavova 24.2.2011, 11:04
Цитата(RastaDja @  24.2.2011,  09:39 Найти цитируемый пост)
 там скорее всего не то, ведь я хочу сделать что то приблизительно такое:

Там описано как отформатировать дату с помощью метода ToString. Текст фильтра естественно надо составлять самому, хотя для наглядности лучше воспользоваться методом String.Format() вместо конкатенации.
Что касается самого форматирования даты, то там описано все довольно подробно и я не вижу смысла повторяться. Еще загляни сюда 
http://msdn.microsoft.com/ru-ru/library/system.data.datacolumn.expression.aspx
поскольку, судя по всему ты не вполне понимаешь, как формируется строка фильтра.

Автор: RastaDja 24.2.2011, 15:53
Цитата(diadiavova @  24.2.2011,  11:04 Найти цитируемый пост)
поскольку, судя по всему ты не вполне понимаешь, как формируется строка фильтра. 


Вы правы, сейчас посмотрю  smile 

Автор: RastaDja 24.2.2011, 16:24
diadiavova,  &  MasterOfCode, 

послушал вашего совета, написал:
Код

string strFilter = "[Date] >= #" + dateTimePicker1.Value.Year.ToString() + "." +    dateTimePicker1.Value.Month.ToString() + "." + dateTimePicker1.Value.Day.ToString() + " 0:00:00#";


не робит!!!

Что за ...

Прошу дайте рабочий пример, который бы сравнил дату dateTimePicker с датой из DataTable, не учитывая времени!

Автор: diadiavova 24.2.2011, 18:21
Цитата(RastaDja @  24.2.2011,  16:24 Найти цитируемый пост)
послушал вашего совета, написал:

Я ничего подобного не советовал smile 
Код

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace DateFilter
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine(
                GetMiddleDateInterval("Date", DateTime.Now.AddYears(-1), DateTime.Now));
            Console.ReadKey();
        }

        static string GetMiddleDateInterval(string collumnName,DateTime startDate, DateTime EndDate)
        {
            var сulture = System.Globalization.CultureInfo.InvariantCulture;
            var startDateStr = startDate.ToString("d", culture);
            var endDateStr = EndDate.ToString("d", culture);
            return string.Format("{0} >= #{1}# AND {0} <= #{2}#", 
                collumnName, startDateStr,endDateStr);
        }
    }
}



Так же строку даты можно отформатировать без использования форматпровайдера. Например: если ты напишешь вот так
Код

DateTime.Now.ToString(@"#d\/M\/yyyy#")

То получишь как раз такое форматирование даты, которое можно напрямую вставлять в строку фильтра. Таким образом можно получить нужную строку вообще сразу, только использовао String.Format
Код

var filterString = string.Format(@"Date >= {0:#d\/M\/yyyy#} AND Date <= {1:#d\/M\/yyyy#}",
                          startDate, endDate);

Автор: RastaDja 25.2.2011, 11:24
diadiavova, спассибо, то что нужно

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)