Lista em colunas

Obrigado Sr. Haroldo pelo retorno, desde ja agradeço pela dica.
Vou tentar implementar e darei o retorno em breve.

Haroldo, muito obrigado… Deus continue abencoando vc!

Boa tarde sr. Haroldo, poderia me ajudar em usar o datagrid para fazer a formatação da minha tabela igual ao exemplo acima:
Estou usando uma gridformato livre e dentro dela uma sobconsulta onde desejo fazer a listagem acima.

qual o limite de colunas?
quantos registros processaria?

primeiro tem que ter o total de registros.
depois montar array com quebra até 3 linhas, quebrou 3 linhas adiciona um item ao array.

depois joga tudo no datagrid.

A consulta traz 12 registros e a ideia e colocar em 4 colunas com três 3 itens cada.
Gostaria de dividir os 12 itens nas três colunas.

Trabalhando nisso…

muito obrigado pela ajuda

Na Prática:
https://dev.iwh.tec.br/scriptcase/control_datagrid_horizontal/

Importar como aplicação: (ajustar para seu banco de dados)
https://dev.iwh.tec.br/downloads/sc9_forum_sc_datagrid_horizontal.zip

Biblioteca externa:
https://dev.iwh.tec.br/downloads/iwactions.zip

evento onScriptInit:

sc_include_library('prj','iwactions','datagrid/datagrid.class.php');

evento de botão ajax:

$sel = "select left(fn_razao,25) from fornecedores order by fn_razao limit {registros}";
$linhasArr = [];
$nColuna = 0;
$quebra = 0;
sc_select(rs,$sel);
if ({rs} === false)
{
	echo "Erro de acesso. Mensagem = " . {rs_erro};
}
	else
{
	while (!{rs}->EOF){
		if ($quebra > {linhas}-1) {
		  	$quebra = 0;
			$nColuna++;			
		}
		$linhasArr[$quebra][$nColuna] = {rs}->fields[0];		
		$quebra++;
		{rs}->MoveNext();
	}
	{rs}->Close();
}

$colunas = (float) ceil({registros} /  {linhas});

//echo '<pre>';
//print_r($linhasArr);
//echo '</pre>';

$dg = new DataGrid($colunas);

$dg->setStyle('Table','style','white-space: nowrap');

$labels=[];
for ($i=0;$i<$colunas;$i++) {
	$labels[$i] = 'Coluna '.($i+1);
}
$dg->addHeader($labels);

foreach($linhasArr as $celulas) {
	$dg->addCell($celulas);
}

{dg} = $dg->create();

criar campos linhas (spin), registros (select) e dg (label)

Nota: Para deixar o exemplo mais completo criei a possibilidade de recriar a grid baseado em um número de linhas e de registros informados em tempo de execução.

TAGS: HAROLDO, DATAGRID, CONTROLE, HORIZONTAL, DINÂMICO

Bom dia a todos, Sr Haroldo ficou top das galáxias.
Muito obrigado pela ajuda, que para mim foi tutorial.
Agradeço também pelo tempo que vc dedicou para está ajuda.

1 Curtida

Pode parecer besteira, mas programar não é só style= background-color: pink.
Para programar tem que se desenvolver muito a lógica. Algumas pessoas conseguem desenvolver uma lógica totalmente na mente e colocar em prática, mas dependendo se faz necessário trabalhar na mesa, ou seja, realizar o teste de mesa. Isso não se ensina mais nos cursos e faculdades hoje em dia: Fluxograma:

Eis o Fluxograma de exemplo acima:
https://app.lucidchart.com/invitations/accept/f55111ba-8dea-47e8-a1ab-4da741358e79

Obrigado mais uma vez por sua generosidade.

1 Curtida

Outro Exemplo do poder da Classe DataGrid

O código da a capacidade da tabela crescer horizontalmente de forma dinâmica, ou seja em tempo de execução.

https://dev.iwh.tec.br/scriptcase/blank_datagrid_horizontal/

sc_include_library('prj','iwactions','class/DataGrid.class.php');
sc_include_library('prj','iwactions','loading.php');

$meses = ['JANEIRO','FEVEREIRO','MARCO','ABRIL','MAIO','JUNHO','JULHO','AGOSTO','SETEMBRO','OUTUBRO','NOVEMBRO','DEZEMBRO'];
$corCols =['#ABEBC6','#F9E79F','#AED6F1'];
$dados = json_decode('{"1":{"2021-1":{"1":7232,"2":3400,"3":"3832"},"2021-2":{"1":7232,"2":3400,"3":"11264"},"2021-3":{"1":7000,"2":3400,"3":"7432"}},"2":{"2021-1":{"1":333,"2":3400,"3":"-3067"},"2021-2":{"1":15255,"2":3400,"3":"6388"},"2021-3":{"1":1000,"2":3400,"3":"-5467"}},"3":{"2021-1":{"1":17024,"2":4000,"3":"13024"},"2021-2":{"1":17024,"2":4000,"3":"22548"},"2021-3":{"1":500,"2":4000,"3":"9524"}}}',true);

$dados2 = json_decode('{"1":["ROLAMENTO DDU C3 6400","0"],"2":["FITA ISOLANTE","0"],"3":["TOMADA 2+T","0"]}',true);

//pegando o indice da primeira linha
//$key=array_key_first($dados); // :( só funciona no php 7.3
$key= '';
$header1=[];
$header2=['Produto','Estoque Inicial'];
foreach ($dados as $key => $val) {
	//montando array da linha 1 e 2 do cabeçalho
	foreach ($val as $anoMes => $val2) {
		$arr = explode('-',$anoMes);
		$header1[] = $meses[$arr[1]-1].'/'.$arr[0];
		$header2[] = 'Compra';
		$header2[] = 'Venda';
		$header2[] = 'Estoque Final';
	}
	break;
}

$cols = count($dados[$key])*3;

$dg = new DataGrid($cols+2);

$dg->setStyle('Table','style','font-family:Arial,Helvetica,sans-serif');

$dg->setStyle('Header_Cell', 'colspan', '2');
$dg->setStyle('Header', 'style', 'background-color:#F7DCA3');
$dg->setStyle('Header', 'style', 'color:black');
$dg->addHeader(' ');

$dg->setStyle('Header', 'style', 'background-color:#D5DBDB');
$dg->setStyle('Header', 'style', 'color:black');
for ($i=1;$i<=$cols/3;$i++){
	$dg->setStyle('Header_Cell', 'colspan', '3');
	$dg->addHeader($header1[$i-1]);
}

//atribuindo  estilos as celulas
$ii=0;
for ($i=1;$i<=$cols+1;$i++) { //varrendo as colunas iniciando na 2 coluna até n colunas
	$dg->setStyle("Header_Cell", 'style', 'width:60px', $i); //largura das colunas de valores
	$dg->setStyle("Cell", 'style', 'text-align:center', $i);
	$dg->setStyle('Cell', 'style', "background-color:{$corCols[$ii]}",$i); //aplicando as cores as colunas
	$ii=$ii==2?0:$ii+1;		
}

$dg->addHeader($header2);

//$dg->setZebraColor('LIGHTGRAY'); //INFORMANDO UMA COR AS LINHAS ZEBRADAS
foreach ($dados as $key => $val) { //varre as linhas
	$dados2[$key][0]=$key.' - '.$dados2[$key][0]; //concatenando id com descriç!ao do produto 
	$linha2 =[];

	foreach ($val as $val2){	//varre as celulas de cada linha	
		$linha2= array_merge($linha2,$val2);		
	}
	
	$dg->addCell(array_merge($dados2[$key],$linha2)); //gera toda a linha
}

echo $dg->create();
1 Curtida

Muito show Sr. Haroldo, mais um exemplo de presente a comunidade do SC

1 Curtida

Haroldo, estou usando o dataGrid, muito obrigado !
Uma pergunta, tem como eu alterar as bordas do table do datagrid? estou tentando, mas sem sucesso.

Você pode aplicar qualquer estilo na tabela.

Veja em:

$dg->setStyle(“Row”, ‘style’, ‘color: blue’); // aplica estilo na linha
$dg->setStyle(“Cell”, ‘style’, ‘text-align:center’, ‘0’); // aplica estilo na primeira coluna
$dg->setStyle(“Table”, ‘style’, ‘text-align:center’); // aplica estilo em toda a tabela
$dg->setStyle(“Header”, ‘style’, ‘text-align:center’); //aplica estilo na linha do cabeçalho
$dg->setStyle(“Table”, ‘class’, ‘highllight’); // adicionando um atributo class a tabela

Ola, Haroldo.
Como vc faria para quebra de pagina, usando o datagrid ?

Contar quantas linhas cabem na página e carregar o datagrid a cada n linhas.

opa, valeu !!!
obrigado, estava precisando de uma luz…

Vc terá o loop ao ler os registros.
Conte as linhas e monte array das linhas lidas.
Ao chegar no nro de linhas por página, carregue o datagrid em cima desse array, esvazie o array e zere o contador de linhas para continuar o processo.

muito obrigado!
vou montar e posto o resultado!