8
respostas

Pegar primeira linha da coluna

Boa tarde pessoal.

Estou com uma dúvida, é o seguinte:

Tenho uma tabela onde tenho que mesclar células utilizando rowspan. Sendo que a coluna 1 desta tabela possui vários nomes iguais nesta coluna, quero usar o rowspan para mesclar as informações repetidas. Sendo que na hora que monto a tabela do lado do C#, tenho um loop para pegar todas as colunas e vai lendo. Sendo que para algumas colunas tenho que pegar apenas a 1º célula da linha para não pegar repetição, por exemplo:

Nome: Flavia Flavia Flavia Flavia

Quero que fique assim com rowspan:

Nome: Flavia

Já estou utilizando o rowspan, mas ele está pegando linha por linha, então pega a repetição. Como pegar apenas a 1º celula da coluna?

Obrigada, Flávia

8 respostas

Flávia, boa tarde!

Você se refere a fazer algo nesse sentido?

Nomeatividade
Felipea
a
a
a
a
Outro nome

Para que isso funcione é necessário ocultar a primeira td das linhas, pois ele já entende que a primeira coluna vai ser preenchida pelo td que está escrito Felipe.

Abaixo um exemplo de código

<table>
  <tr>
    <td>Nome</td>
    <td>atividade</td>
  </tr>
  <tr>
    <td rowspan=5>Felipe</td>
    <td>a</td>
  </tr>
  <tr>
    <td>a</td>
  </tr>
  <tr>
    <td>a</td>
  </tr>
  <tr>
    <td>a</td>
  </tr>
  <tr>
    <td>a</td>
  </tr>
  <tr>
    <td>Outro nome</td>
  </tr>
</table>

Espero ter ajudado e bons estudos!

Bom dia Felipe.

Já utilizo o rowspan, sendo que com tenho informações repetidas em uma mesma coluna ele está jogando a informação para a coluna seguinte.

Estou fazendo assim:

colunasArray[3] = td(noFiltrado.Item.Nome + " (" + pessoa.Nome + ")").attr($"rowspan = {linhasArray.Length}");

Sendo que depois para montar toda a tabela coluna por coluna faço um for, assim:

for (int i = 0; i < colunasArray.Length; i++)
        {
            if (colunasArray[i] == null)


                colunasArray[i] = td();

}

Neste ponto é montado todas as colunas e como tem informação repetida na coluna 3 por exemplo, ele divide o rowspan em 4 por exemplo, coloca a célula 3 mesclada em 4 e joga as informações duplicadas para as demais colunas. Teria que pegar a coluna que quero mesclar, pegar a conteúdo da primeira celula e ignorar o resto. Teria como fazer isso?

Obrigada. Flávia

Alguém poderia me ajudar?

Obrigada. Flavia

Flávia, boa tarde!

Desculpa, não ficou muito claro a dúvida para que eu possa ajudar!

No caso você está querendo que não seja criada aquela coluna a mais visto que ela deveria estar mesclada? Eu fiz um exemplo para que você possa testar

https://codepen.io/devcapu-the-looper/pen/oNvoEXJ

Caso não tenha ajudado, poderia descrever o problema novamente, para que eu possa compreender melhor

Agradeço a compreensão e bons estudos!

Boa tarde Felipe.

Vou explicar melhor utilizando o seu exemplo: Quero mesclar linhas de uma coluna exatamente como você fez com o nome Felipe, sendo que quero pegar só a 1º célula da tabela neste caso Felipe e desprezar as demais como por exemplo, Outro nome na exibição da tabela. Existe algum atributo que possibilite pegar apenas a primeira linha da coluna(neste caso Felipe)e desprezar as demais(Outro nome não ser exibido)?

Obrigada. Flávia

Flávia, boa tarde!

Agora eu acredito que entendi sua dúvida! Você pode mostrar como está esse laço de repetição no seu código C#?

Eu penso como uma das possíveis soluções seria que você contasse quantas vezes aqueles seu nome se repete no seu código c# e gerar o valor do rowspan do primeiro td, a partir desse contador, parecido com isso:

 <tr>
    <td>Nome</td>
    <td>atividade</td>
  </tr>
  <tr>
    <td rowspan=$$$>Felipe</td>
    <td>a</td>
  </tr>

E ali onde eu coloquei $$$ você coloca a variável contadora!

E a partir dai, nas outras repetições você não precisa mais colocar o rowspan para esse nome pois ele já irá mesclar

Espero ter ajudado e bons estudos!

Oi Felipe.

Já faço isso, veja um pouco do meu código:

colunasArray[0] = td(noFiltrado.Item.Nome).attr($"rowspan = {linhasArray.Length}");

Para a coluna 0 mesclo o atributo Nome pelo número de linhas da tabela. Ele realiza a mesclagem, mas como tenho vários nomes iguais ele joga a repetição para a coluna 1 e se tiver mais repetições joga para a coluna 2. Por este motivo queria uma forma de bloquear o aparecimento das demais linha da coluna 0 e exibir apenas a linha 1. Teria algum atributo para isso?

Obrigada. Flávia

Oi pessoal. Ainda não cheguei em uma solução, mas estou quase lá.

O que quero fazer é o seguinte:

 <th>Empresa</th>
 <th>Unidade</th> 
 <th>Cargo</th> 
 <th>Nome</th>
 <th>Observação</th>

 <tr>
   <td rowspan="4">Google</td> 
   <td>Unidade Teste</td>
   <td rowspan="4">Analista de Sistemas</td>
   <td>Teste</td>
   <td rowspan="4">Observação</td>
 </tr>



  <tr>
   <td hidden>Google</td> 
   <td>Unidade Teste 1</td>
   <td hidden>Analista de Sistemas</td>
   <td>Teste 1</td>
   <td hidden>Observação</td>
  </tr>

  <tr>
   <td hidden>Google</td> 
   <td>Unidade Teste 2</td>
   <td hidden>Analista de Sistemas</td>
   <td>Teste 2</td>
   <td hidden>Observação</td>
  </tr>


  <tr>
   <td hidden>Google</td> 
   <td>Unidade Teste 2</td>
   <td hidden>Analista de Sistemas</td>
   <td>Teste 3</td>
   <td hidden>Observação</td>
  </tr>

Sendo que tenho que fazer isto em C#, tentei assim:

for (int row = 0; row < linhasArray.Length; row++) { if (row == 0) {

                    linhasArray[0] = tr(td(noFiltrado.Item.Empresa).attr($"rowspan = {linhasArray.Length}"),
                    colunasArray[1],
                    td(noFiltrado.Item.Cargo).attr($"rowspan = {linhasArray.Length}"),

                    colunasArray[3],
                                        td(noFiltrado.Item.Observacao).attr($"rowspan = {linhasArray.Length}"));



                }
                if(row > 0)
                {
                linhasArray[0] = tr(td(noFiltrado.Item.Empresa).attr("hidden"),
                    colunasArray[1],
                    td(noFiltrado.Item.Cargo).attr("hidden"),

                    colunasArray[3],
                                        td(noFiltrado.Item.Observacao).attr("hidden"));

                }


            }

A minha idéia aqui seria para a primeira linha da tabela montar cada coluna com rowspan e as demais atribuir o atributo hidden para mesclar. Sendo que esta condição para pegar a primeira linha está pegando sempre. Gostaria de pegar apenas na primeira vez. O que estou fazendo de errado?

Quero fazer exatamente o que fiz no html.

Obrigada Flavia.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software