Como classificar coluna DataGrid

votos
0

Eu tenho um datagrid que contém dados que retrived a partir de um banco de dados e o DataGrid exibe dados no mesmo formato como no banco de dados.

Uma das colunas é dateFrom que é a coluna gostaria de classificar. Dateform armazenada na base de dados como VARCHAR, por conseguinte, é classificada por ordem alfabética, por exemplo, 2/2004, 2/2008, 4/2003. Eu quero converter DatFrom para typ DateTime, e classificar os valores numéricos antes da exibição no datagrid.

Há alguma forma de fazer isso?

obrigado

Aein

Publicado 19/05/2009 em 22:09
fonte usuário
Em outras línguas...                            


5 respostas

votos
1

Eu criei uma tabela de demonstração pouco (de teste). Inserida algumas datas de teste e fez uma consulta seleção:

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)
Respondeu 19/05/2009 em 23:23
fonte usuário

votos
0

Obrigado rapazes. Eu vou olhar para ele. Eu tenho que cair esse projeto por um tempo. Eu vou deixar você saber se eu poderia fazê-lo funcionar ou não.

Respondeu 11/06/2009 em 14:36
fonte usuário

votos
0

Eu não tenho certeza se eu entendi sua pergunta. No entanto, o que acontece para classificar as linhas do lado do SQL com algo como:

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

Ela vai mudar o original 2/1999 para 199902/1999 para que ele possa ser comparado como string. A parte após a barra está lá apenas porque eu não queria cortar a corda, uma vez que não é necessário.

ou

SELECT ...
ORDER BY Cast(int, 
              Substring(DateFrom, CHARINDEX('/', DateFrom) + 1, 4) 
       * 100 
       + Cast(int, 
              Substring(DateFrom, 1, CHARINDEX('/', DateFrom));
Respondeu 19/05/2009 em 22:39
fonte usuário

votos
0

Eu acho que entendo o que você está perguntando aqui. Deixe-me saber se eu estou fora da base. Eu acho que a maneira mais fácil de corrigir isso é na instrução SELECT para obter seus dados a partir do banco de dados, mas pode não ser necessariamente o melhor método. Aqui está o que eu vim acima com:

Desde a sua "dateFrom" está no formato "MM / aaaa", você não será capaz de fazer uma operação de conversão em linha reta (). A melhor maneira de obter um valor DATETIME válido, que eu posso pensar, é analisar a coluna dateFrom atual e tratar todas as datas como o primeiro dia do mês, então você pode definir um formato de "MM / aaaa" na coluna de datagrid , e ainda vai processar corretamente. A declaração CAST () poderia ser algo como isto:

SET DATEFORMAT MDY

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

Eu sei que este não é o método mais elegante, mas deve funcionar, desde que o formato da data é consistente . Boa sorte!

Respondeu 19/05/2009 em 22:23
fonte usuário

votos
0

Provavelmente envolver a coluna para implementar a interface IComparable para que possa fornecer uma classificação personalizada, aqui está um exemplo .

Respondeu 19/05/2009 em 22:22
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more