Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Фильтрация данных по времени, Фильтруется ТОЛЬКО в АМЕРИКАНСКОЙ культу 
V
    Опции темы
ivashkanet
  Дата 7.12.2006, 14:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


Профиль
Группа: Участник Клуба
Сообщений: 3684
Регистрация: 23.2.2006
Где: Гомель, Беларусь

Репутация: 47
Всего: 149



Понадобилось фильтровать грид по дате. Добавил BindingSource. Ассоциировал его с гридом. Ставлю фильтр:
Код

                Dim filterString As String = String.Format("[StartDate] <= #{0}# AND [StopDate] >= #{1}#", startDate, stopDate)
                WorkCentreEventsBindingSource.Filter = filterString

Не работает. Пробовал и так и сяк ---- не работает.

Решил вручную протестить. Завел текстбокс. И стал менять дату.

Заметил, что работает только если порядок таков  Месяц - День - Год
ОК, подумал я, что-то с культурами не так.

Глянул --- CurrentCulture стоит в ru-RU, т.е. то же что и в настройках винды, а CurrentUICulture стоит en-US.

Ага, подумал я, .Net считает, что фильтровать нужно по CurrentUICulture.
Не проблема, меняем ее:
Код

Threading.Thread.CurrentThread.CurrentUICulture = Application.CurrentCulture


Теперь в методе фильтрации все нормально. Приходит две одинаковых культуры. 

Но... фильтр не пашет.

Я попробовал принудительно конвертировать дату в UICulture:
Код
 startDate.ToString(Threading.Thread.CurrentThread.CurrentUICulture) 

Не помогает.
Закоментировал изменение культуры:
Код

' Threading.Thread.CurrentThread.CurrentUICulture = Application.CurrentCulture


Работает.

Мистика, блин.
Потом меня осенило: фильтр работает ТОЛЬКО для АМЕРИКАНСКОЙ культуры.

Попробовал:
Код

                Dim USCultureInfo As Globalization.CultureInfo = Globalization.CultureInfo.GetCultureInfo("en-US")

                Dim filterString As String = String.Format("[StartDate] <= #{0}# AND [StopDate] >= #{1}#", startDate.ToString(USCultureInfo), stopDate.ToString(USCultureInfo))
                WorkCentreEventsBindingSource.Filter = filterString

Работает, нах  smile 


Так вот вопрос к честному люду:

У кого руки кривые?
У меня или у тех кто реализовывал BuindingSource smile 
PM MAIL WWW ICQ   Вверх
mr.DUDA
Дата 7.12.2006, 14:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



DataSet.Locale по дефолту в инвариантной культуре стоит, а ты её поставь в ту что надо. Тогда и формат даты можно любой поюзать.


--------------------
user posted image
PM MAIL WWW   Вверх
ivashkanet
Дата 7.12.2006, 14:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


Профиль
Группа: Участник Клуба
Сообщений: 3684
Регистрация: 23.2.2006
Где: Гомель, Беларусь

Репутация: 47
Всего: 149



mr.DUDA, похоже на то.
Но почему они, собаки, берут инвариантную культуру по дефолту для таблицы:
Код

//DataTable:

internal IFormatProvider FormatProvider 
{ 
      get 
      { 
            if (this._formatProvider == null) 
            { 
                  CultureInfo info1 = this.Locale; 
                  if (info1.IsNeutralCulture) 
                  { 
                        info1 = CultureInfo.InvariantCulture; 
                  } 
                  this._formatProvider = info1; 
            } 
            return this._formatProvider; 
      } 
} 


Почему бы не брать CurrentCulture или на худой конец CurrentUICulture  smile

Добавлено @ 14:52 
Цитата(ivashkanet @  7.12.2006,  13:01 Найти цитируемый пост)
У кого руки кривые?
У меня или у тех кто реализовывал BuindingSource

Спор разрешился ничьей.  smile 
PM MAIL WWW ICQ   Вверх
mr.DUDA
Дата 7.12.2006, 15:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



ivashkanet, потому что датасет можно юзать например в рамках ASP.NET, а там не факт что культура потока на сервере будет совпадать с культурой клиента (скорее наоборот), вот и дают возможность ставить её ручками, а чтоб было единообразие для тех кому культура по барабану - используется дефолтная.


--------------------
user posted image
PM MAIL WWW   Вверх
ivashkanet
Дата 7.12.2006, 15:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


Профиль
Группа: Участник Клуба
Сообщений: 3684
Регистрация: 23.2.2006
Где: Гомель, Беларусь

Репутация: 47
Всего: 149



mr.DUDA, могу предложить элегантное решение:

Культура конкретного потока сервера (который обрабатывает данные клиента) --- это не культура сервера, а культура клиента  smile 
PM MAIL WWW ICQ   Вверх
mr.DUDA
Дата 7.12.2006, 15:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



ivashkanet, это в асп.нет спросить надо. Я там не особо силён smile, но знаю что культура сама собой не устанавливается, для этого нужны шаманские танцы с бубном (скрипт на стороне клиента, определяющий культуру; или по IP etc)


--------------------
user posted image
PM MAIL WWW   Вверх
ivashkanet
Дата 7.12.2006, 16:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


Профиль
Группа: Участник Клуба
Сообщений: 3684
Регистрация: 23.2.2006
Где: Гомель, Беларусь

Репутация: 47
Всего: 149



Цитата(mr.DUDA @  7.12.2006,  13:45 Найти цитируемый пост)
DataSet.Locale по дефолту в инвариантной культуре стоит, а ты её поставь в ту что надо. Тогда и формат даты можно любой поюзать. 

Ха, хорошая идея была smile

Но она не работает  smile  smile 

Менял и локаль таблицы и локаль датасета ---- все одно.

Короче буду юзать InvariantCulture (которая, почему-то en-US. Никто не знает почему?  smile )
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0483 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.