Jump to content
vastri

Ordenação Vertical

Recommended Posts

vastri

Olá,

Tenho os valores de um DataTable que pretendia ordenar em 3 colunas verticalmente, o css que tenho é do Bootstrap que por cada 3 valor cria uma nova linha mas na horizontal.

Dim conn As String = ConfigurationManager.ConnectionStrings("DefaultConnection").ToString
 Try
	 Dim SQL As String = "SELECT * FROM Teste ORDER BY valor ASC"
	 TesteDataAdapter = New SqlDataAdapter(SQL, conn)
	 TesteDataSet = New DataSet
	 TesteDataAdapter.Fill(TesteDataSet, "Teste")
 Catch ex As Exception
	 Console.WriteLine(ex.Message)
 Finally
	 conn = Nothing
 End Try

 Dim TesteTabela As DataTable
 TesteTabela = TesteDataSet.Tables("Teste")
 'Loop DataTable
 For Each row As DataRow In TesteTabela.Rows
	 Console.WriteLine(row("valor").ToString)
 Next row

Os valores na tabela são:

a

b

c

d

e

f

g

h

i

Que atualmente aparecem ordenados (na horizontal):

a b c

d e f

g h i

E eu queria (na vertical):

a d g

b e h

c f i

Sinceramente não estou a ver como fazer isto, alterar o css?! há solução para o DataTable ordenar na vertical?!

Já pesquisei um monte de coisas, mas não encontro solução, devo estar a pesquisar informação errada.

Alguma solução?

Edited by vastri

Share this post


Link to post
Share on other sites
vikcch

Boas,

através do datatable não sei se é possivel...

mas se tiveres um array de string podes o sempre ordenar ou mostrar como quiseres...

fiz este code pode ser que ajude em alguma coisa...

Option Explicit On
Option Strict On

Module Module1

   Sub Main()

    Dim arr() As String = {}

    'Preencher array com letras de "A" a "Z"
    For i As Integer = 0 To 25
	    ReDim Preserve arr(i)
	    arr(i) = Chr(65 + i)
    Next

    'redefenir array para o proximo multiplo de 3 caso não seja
    If arr.Length Mod 3 <> 0 Then
	    ReDim Preserve arr(arr.Length - 1 + 3 - arr.Length Mod 3)
    End If

    'printar array verticalmente em 3 colunas
    For i = 0 To arr.Length \ 3 - 1
	    Console.Write(arr(i) & " " & arr(i + arr.Length * 1 \ 3) & " " & arr(i + arr.Length * 2 \ 3))
	    Console.WriteLine()
    Next

    Console.ReadKey()

   End Sub

End Module

mostra isto:

ordemvertical.png

Share this post


Link to post
Share on other sites
vastri

vikcch, obrigado pelo esforço e também e pela forma completa como o fizeste, código inteligente (brutal...).

Como sou iniciante andei aqui a "patinar" um pouco para colocar os valores do for each do datatable no array, quando consegui apareceu um "erro" até o perceber dei "cabo do miolo", a ordenação não aparecia correta se o numero de registos não fosse divisível por 3, o código que tenho acima foi basicamente para fácil entendimento da minha duvida o código "real" é mais completo e inclui nos valores a passar para o array código HTML, primeiro pensei que o problema estivesse ai algumas horas depois... descobri que não, testei, testei e testei o teu código numa app Windows em diversos cenários e dava sempre certo, quando passava para o projecto web com os valores da bd o problema aparecia, depois de muitas horas... lá descobri que o problema, não estava no código mas sim no css como "injetava" código HTML o css interpretava-o como sequencial e os espaços que completavam as colunas eram ignorados, se não fosse divisível por 3 a coisa dava errada, resolvi acrescentando linhas "em branco" até o array.lenght ser múltiplo de 3 com o mesmo método que utilizas para redefinir o array para o próximo múltiplo de 3, e está a bombar....

Agradecido :thumbsup: :thumbsup: :thumbsup:

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.