Fala Galera, tenho uma aplicação WEB em Node.JS e estou desenvolvendo uma tela onde o usuário faz suas próprias consultas SQL, ao digitar o SELECT no formulário, a Query é enviada no POST da rota e na rota retorno o resultado da query em um Array e este array é passado como parâmetro no render da página para popular um JTable do bootstrap.
Normalmente
Em uma consulta conhecida onde sei a tabela que preciso popular a JTable ja defino a coluna de títulos:
<!-- Cabeçalho: Titulos da tabela -->
<thead class="thead-light">
<tr>
<th scope="col">Cod</th>
<th scope="col">Aviso</th>
</tr>
</thead>
E no conteúdo da tabela faço um forEach e populo as linhas conforme qtde de registros que possui:
<tbody>
<!-- Detalhes: Dados da tabela -->
<% DTAvisos.forEach((row, index) => { %>
<tr>
<td><%= row.cod %></td>
<td><%= row.aviso %></td>
</tr>
<% }) %>
</tbody>
Problema
Porém neste caso eu não sei a tabela específica pois foi o usuário que gerou a query, então para popular a JTable eu preciso:
-
Saber os nomes das colunas para eu gerar a linha de título da tabela (
<tr> <th>
) -
Popular as linhas com os valores sem informar o nome da coluna (
<td><%= row.**cod** %></td>
)
O item 1 eu consegui, vejam:
<table id="TBtable" class="table table-hover" style="display: none;">
<tbody>
//DTResultado é o array que estou recebendo para popular a JTable
<tr>
<% Object.keys(DTResultado[0]).forEach((row, index, array)=> { %>
<td>
<%= row %> //Aqui está exibindo os nomes das colunas ok
</td>
<% }) %>
</tr>
Resultado da linha título da JTable:
Ai quando eu tento popular os valores da mesma forma não rola, se eu coloco somente <%= row %>
exibi os registros somente na primeira coluna, daria certo se eu colocasse <%= row.cod %>
, <%= row.data%>
, <%= row.nome_da_coluna %>
ou seja, informando o nome da coluna no row ai da certo mas lembrem-se que eu não sei o nome da coluna, este é o código até onde consegui chegar:
<!-- Detalhes: Dados da tabela -->
<% var i = 0; %>
<% while (i < Object.values(DTResultado).length) { %>
<% Object.values(DTResultado[i]).forEach((row, index, array)=> { %>
<tr>
<td><%= row %></td>
</tr>
<% }) %>
<% i++; %>
<% } %>
</tbody>
</table>
Este é o resultado com o código acima (só tenho 2 registros na tabela), está trazendo os dois registros mas traz tudo numa única coluna, eu preciso que venda cada valor em sua coluna:
Por favor, podem me ajudar?
Como faço para popular as linhas da JTable através desse array sem passar alí no <td>
o nome da coluna, ou se existe uma forma de eu passar o nome da coluna usando o loop que fiz anteriormente pegando os nomes das colunas (já tentei mas não consegui). Ou pegar este meu resultado atual e ao invez de mostrar na vertical mostrar na horizontal, sei lá.