none
Preecher colunas criadas por um "for" (iniciante) RRS feed

  • Pergunta

  • Galera, é situação meio difícil de explicar, mas vou tentar.

    Seguinte, no meu banco de dados possuo tabelas CL_CLIENTE e CL_TELEFONE. CL_TELEFONE possui uma FK que faz referencia a CL_CLIENTE(IDCLIENTE). Na minha datagridview eu escolhi como datasource a tabela CL_CLIENTE, e fiz um "for" para criar as colunas que hipoteticamente iriam exibir os telefones dos clientes, conforme anexo abaixo:

    Eu queria uma luz de como eu faria para preencher na datagridview os telefones dos respectivos clientes.

    O "for" que eu criei segue abaixo:

    E a SQL por trás disso é essa:
    

    sábado, 14 de abril de 2018 21:20

Respostas

  • Olá, execute esta query no banco e veja se o resultado é isso que você quer. Caso funcione use esta query para popular o seu DGV.

    ;WITH CTE AS
    (
     SELECT C.FANTASIA,T.TELEFONE,
     ROW_NUMBER() OVER(PARTITION BY C.FANTASIA ORDER BY C.FANTASIA DESC) AS ROW_NO
     FROM CL_CLIENTE AS C, CL_TELEFONE AS T WHERE T.ID_CLIENTE_TELEFONE = C.ID
    )
    SELECT FANTASIA
    ,MAX(CASE WHEN ROW_NO = 1 THEN TELEFONE END )AS TELEFONE1
    ,MAX(CASE WHEN ROW_NO = 2 THEN TELEFONE END )AS TELEFONE2
    ,MAX(CASE WHEN ROW_NO = 3 THEN TELEFONE END )AS TELEFONE3
    ,MAX(CASE WHEN ROW_NO = 4 THEN TELEFONE END )AS TELEFONE4
    ,MAX(CASE WHEN ROW_NO = 5 THEN TELEFONE END )AS TELEFONE5
    ,MAX(CASE WHEN ROW_NO = 6 THEN TELEFONE END )AS TELEFONE6
    ,MAX(CASE WHEN ROW_NO = 7 THEN TELEFONE END )AS TELEFONE7
    ,MAX(CASE WHEN ROW_NO = 8 THEN TELEFONE END )AS TELEFONE8
    ,MAX(CASE WHEN ROW_NO = 9 THEN TELEFONE END )AS TELEFONE9
    ,MAX(CASE WHEN ROW_NO = 10 THEN TELEFONE END )AS TELEFONE10
    FROM CTE
    GROUP BY FANTASIA

    Abs!


    Leandro de Agostini MCTS - Web Application, Framework 4

    • Marcado como Resposta Yuri Pinheiro segunda-feira, 16 de abril de 2018 16:00
    domingo, 15 de abril de 2018 01:14

Todas as Respostas

  • Olá Yuri, ao invés de você realizar um FOR para trazer as informações da tabela cliente você já tentou o seguinte:
    1.
    SELECT
    CLI.ID
    ,CLI.FANTASIA
    ,CLI.CONTATO
    ,TEL.TELEFONE1
    ,TEL.TELEFONE2
    ,TEL.TELEFONE3
    FROM CL_CLIENTE AS CLI
    INNER JOIN CL_TELEFONE AS TEL
    ON CLI.IDCLIENTE = TEL.ID_CLIENTE_TELEFONE

    2. Esse select deve pertencer ao método bus.atualiza_dgv_bus()

    3. comente este for bus.qtd_telefones_dgv_bus()

    Abs!


    Leandro de Agostini MCTS - Web Application, Framework 4

    sábado, 14 de abril de 2018 21:37
  • Olá Yuri, ao invés de você realizar um FOR para trazer as informações da tabela cliente você já tentou o seguinte:
    1.
    SELECT
    CLI.ID
    ,CLI.FANTASIA
    ,CLI.CONTATO
    ,TEL.TELEFONE1
    ,TEL.TELEFONE2
    ,TEL.TELEFONE3
    FROM CL_CLIENTE AS CLI
    INNER JOIN CL_TELEFONE AS TEL
    ON CLI.IDCLIENTE = TEL.ID_CLIENTE_TELEFONE

    2. Esse select deve pertencer ao método bus.atualiza_dgv_bus()

    3. comente este for bus.qtd_telefones_dgv_bus()

    Abs!


    Leandro de Agostini MCTS - Web Application, Framework 4

    O problema é o seguinte, eu posso cadastrar infinitos telefones, e se o cara tiver 10 telefones, iria exibir 10 colunas mesmo que outros clientes tivessem menos telefones, segue minha ilustração: 

    

     O for eu criei, pra simplesmente criar uma nova coluna quando um determinado cliente possui mais telefone do que os outros. 

    sábado, 14 de abril de 2018 21:58
  • Olá Yuri, se eu entendi bem o que você quer seria isso:
    1. O cliente de ID = 1 deve aparecer apenas 3 colunas
    2. O cliente de ID = 3 deve aparecer apenas as 6 colunas que ele possui de telefone cadastrado
    Se for isso não é possível excluir as colunas que estão em branco dos outros IDs pois o DGV precisa do Header para identificar o que cada célula do grid possui em cada linha.
    Abs!

    Leandro de Agostini MCTS - Web Application, Framework 4

    sábado, 14 de abril de 2018 22:20
  • Não quero excluir as celulas em branco, eu quero deixa exatamente igual a minha ilustração, eu ja consegui criar as colunas de acordo com o cliente que tem maior numero de telefones, o que eu queria agora, seria setar nas celulas os telefones dos respectivos clientes, igualzinho a minha ilustração.
    sábado, 14 de abril de 2018 22:31
  • Olá, execute esta query no banco e veja se o resultado é isso que você quer. Caso funcione use esta query para popular o seu DGV.

    ;WITH CTE AS
    (
     SELECT C.FANTASIA,T.TELEFONE,
     ROW_NUMBER() OVER(PARTITION BY C.FANTASIA ORDER BY C.FANTASIA DESC) AS ROW_NO
     FROM CL_CLIENTE AS C, CL_TELEFONE AS T WHERE T.ID_CLIENTE_TELEFONE = C.ID
    )
    SELECT FANTASIA
    ,MAX(CASE WHEN ROW_NO = 1 THEN TELEFONE END )AS TELEFONE1
    ,MAX(CASE WHEN ROW_NO = 2 THEN TELEFONE END )AS TELEFONE2
    ,MAX(CASE WHEN ROW_NO = 3 THEN TELEFONE END )AS TELEFONE3
    ,MAX(CASE WHEN ROW_NO = 4 THEN TELEFONE END )AS TELEFONE4
    ,MAX(CASE WHEN ROW_NO = 5 THEN TELEFONE END )AS TELEFONE5
    ,MAX(CASE WHEN ROW_NO = 6 THEN TELEFONE END )AS TELEFONE6
    ,MAX(CASE WHEN ROW_NO = 7 THEN TELEFONE END )AS TELEFONE7
    ,MAX(CASE WHEN ROW_NO = 8 THEN TELEFONE END )AS TELEFONE8
    ,MAX(CASE WHEN ROW_NO = 9 THEN TELEFONE END )AS TELEFONE9
    ,MAX(CASE WHEN ROW_NO = 10 THEN TELEFONE END )AS TELEFONE10
    FROM CTE
    GROUP BY FANTASIA

    Abs!


    Leandro de Agostini MCTS - Web Application, Framework 4

    • Marcado como Resposta Yuri Pinheiro segunda-feira, 16 de abril de 2018 16:00
    domingo, 15 de abril de 2018 01:14