Как отсортировать столбец DataGrid - PullRequest
0 голосов
/ 20 мая 2009

У меня есть сетка данных, которая содержит данные, извлеченные из базы данных, и сетка данных отображает данные в том же формате, что и в базе данных.

Один из столбцов - это DateFrom, который я хочу отсортировать. Dateform хранится в базе данных как Varchar, поэтому сортируется по алфавиту, например 2/2004, 2/2008, 4/2003. Я хочу преобразовать DatFrom в тип DateTime и отсортировать значения по номерам перед отображением в сетке данных.

Есть ли способ сделать это?

Спасибо

АСЭИ

Ответы [ 5 ]

1 голос
/ 20 мая 2009

Я создал небольшую демонстрационную таблицу (тест). Вставил несколько тестовых дат и сделал запрос на выборку:

Create Table test(dt varchar(10))
Go
Insert Into test(dt)
Select '2/2004'
Union Select '2/2008'
Union Select '4/2003'
Go

Select *
From test
Order By Convert(datetime, '1/' + dt, 103)
0 голосов
/ 11 июня 2009

Спасибо, ребята. Я посмотрю на это. Я должен отказаться от этого проекта на некоторое время. Я дам вам знать, смогу ли я заставить его работать или нет.

0 голосов
/ 20 мая 2009

Мне кажется, я понимаю, о чем вы здесь спрашиваете. Дай мне знать, если я не в базе. Я думаю, что самый простой способ исправить это - воспользоваться оператором select для получения данных из базы данных, но это не обязательно может быть метод best . Вот что я придумала:

Поскольку ваш «DateFrom» имеет формат «MM / гггг», вы не сможете выполнить прямую операцию CAST (). Лучший способ получить действительное значение DATETIME, о котором я могу подумать, - это проанализировать текущий столбец DateFrom и обработать все даты как первое число месяца, затем вы можете установить формат «MM / гггг» в столбце таблицы данных и он все равно будет отображаться правильно. Оператор CAST () может выглядеть примерно так:

SET DATEFORMAT MDY

SELECT CAST(SUBSTRING(DateFrom, 0, CHARINDEX('/',DateFrom))
        + '/1/'
        + SUBSTRING(DateFrom, CHARINDEX('/',DateFrom) +1, 4) AS DATETIME) AS DateFrom

Я знаю, что это не самый элегантный метод, но он должен работать, если ваш формат даты соответствует . Удачи!

0 голосов
/ 20 мая 2009

Я не уверен, понял ли я ваш вопрос. Тем не менее, как насчет сортировки строк на стороне SQL что-то вроде:

SELECT ...
ORDER BY Substring(DateFrom, CHARINDEX('/', DateFrom) + 1, 4) 
         + Lpad(DateFrom, 7, '0');

Изменит исходное значение 2/1999 на 199902/1999, чтобы его можно было сравнить как строку. Часть после косой черты есть только потому, что я не хотел обрезать строку, так как она не нужна.

или

SELECT ...
ORDER BY Cast(int, 
              Substring(DateFrom, CHARINDEX('/', DateFrom) + 1, 4) 
       * 100 
       + Cast(int, 
              Substring(DateFrom, 1, CHARINDEX('/', DateFrom));
0 голосов
/ 20 мая 2009

Вероятно, оберните столбец для реализации интерфейса IComparable, чтобы вы могли обеспечить пользовательскую сортировку, здесь приведен пример .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...