none
Dois Valores no Mesmo TextBox RRS feed

  • Pergunta

  • Pessoal,

    Existe a possibilidade de informar dois valores no mesmo textbox?

    Por exemplo tenho uma consulta SQL que filtra o produto '1'

    queria que no textbox que faz o filtro, o usuário pudesse digitar '1,2,3...

    sexta-feira, 17 de outubro de 2014 16:01

Respostas

  • Sabe me dizer como devo montar isso no C#

    O que tenho no momento é isto:

    String Produto = Convert.ToString(textBox1.Text);
                
    // TODO: esta linha de código carrega dados na tabela 'DataSet1.PRODUTOS_DATA'. Você pode movê-la ou removê-la conforme necessário.
                this.PRODUTOS_DATATableAdapter.FillbyDATA_PRODUTO(this.DataSet1.PRODUTOS_DATA, DATAINI, DATAFIM, Produto);
    
                this.reportViewer1.RefreshReport();


    Segue exemplo como ficaria se baseando em seu código acima:


         String Prod = Produto();
               
                // TODO: esta linha de código carrega dados na tabela 'DataSet1.PRODUTOS_DATA'. Você pode movê-la ou removê-la conforme necessário.
                this.PRODUTOS_DATATableAdapter.FillbyDATA_PRODUTO(this.DataSet1.PRODUTOS_DATA, DATAINI, DATAFIM, Prod);
                this.reportViewer1.RefreshReport();
    
            public string Produto()
            {
                string produto = "agua,cafe,sopa";
                string[] produtos = produto.Split(',');
                string concat = string.Empty;
                try
                {
                    foreach (string prod in produtos)
                    {
                        concat = concat + "\'" + prod + "\',";
                    }
    
                    concat = concat.Remove(concat.Length - 1);
                }
                catch (Exception ex)
                {
                    throw new Exception("Erro ao retornar produtos");
                }
    
                return concat;
            }
    No seu sql vai ficar assim:

    SELECT        A.FILIAL, A.NOME_VENDEDOR, B.PRODUTO, SUM(B.QTDE) AS QUANTIDADE
    FROM            W_LOJA_VENDA_VENDEDORES AS A INNER JOIN
                             W_LOJA_VENDA_PRODUTO AS B ON A.TICKET = B.TICKET
    WHERE        (A.DATA_VENDA BETWEEN @DATAINI AND @DATAFIM) AND (A.FILIAL NOT IN ('E-COMMERCE')) AND (B.QTDE > 0) AND 
                             (A.NOME_VENDEDOR NOT IN ('JORGE ALEX', 'JORGE ALEX ANALIA FRANCO', 'JORGE ALEX MOEMA', 'JORGE ALEX MORUMBI')) AND 
                             (B.PRODUTO IN ('agua','cafe','sopa')) //Este é o Parâmetro!
    GROUP BY A.FILIAL, A.NOME_VENDEDOR, B.PRODUTO
    ORDER BY A.FILIAL, A.NOME_VENDEDOR, B.PRODUTO


    sexta-feira, 17 de outubro de 2014 17:26
  • Veja se seu codigo esta igual a este aqui:

    //SQL ORIGINAL NÃO MUDA
    SELECT        A.FILIAL, A.NOME_VENDEDOR, B.PRODUTO, SUM(B.QTDE) AS QUANTIDADE
    FROM            W_LOJA_VENDA_VENDEDORES AS A INNER JOIN
                             W_LOJA_VENDA_PRODUTO AS B ON A.TICKET = B.TICKET
    WHERE        (A.DATA_VENDA BETWEEN @DATAINI AND @DATAFIM) AND (A.FILIAL NOT IN ('E-COMMERCE')) AND (B.QTDE > 0) AND 
                             (A.NOME_VENDEDOR NOT IN ('JORGE ALEX', 'JORGE ALEX ANALIA FRANCO', 'JORGE ALEX MOEMA', 'JORGE ALEX MORUMBI')) AND 
                             (B.PRODUTO IN (@PRODUTO)) //Este é o Parâmetro!
    GROUP BY A.FILIAL, A.NOME_VENDEDOR, B.PRODUTO
    ORDER BY A.FILIAL, A.NOME_VENDEDOR, B.PRODUTO 
    
    
    
    
    String Prod = Produto(textBox1.Text);
               
                // TODO: esta linha de código carrega dados na tabela 'DataSet1.PRODUTOS_DATA'. Você pode movê-la ou removê-la conforme necessário.
     this.PRODUTOS_DATATableAdapter.FillbyDATA_PRODUTO(this.DataSet1.PRODUTOS_DATA, DATAINI, DATAFIM, Prod);
    
                this.reportViewer1.RefreshReport();
    
            public string Produto(string produto)
            {
                string[] produtos = produto.Split(',');
                string concat = string.Empty;
                try
                {
                    foreach (string prod in produtos)
                    {
                        concat = concat + "\'" + prod + "\',";
                    }
    
                    concat = concat.Remove(concat.Length - 1);
                }
                catch (Exception ex)
                {
                    throw new Exception("Erro ao retornar produtos "+ex.Message);
                }
    
                return concat;
            }


    sexta-feira, 17 de outubro de 2014 23:07
  • Verifique se o parâmetro Produto está declarado no seu método 
    FillbyDATA_PRODUTO.
    sexta-feira, 17 de outubro de 2014 17:17

Todas as Respostas

  • É possível digitar qualquer texto, logo: caso você faça o filtro com IN ao invés de 1 na cláusula SQL resolveria seu problema. Outra opção é utilizar uma combo que permita múltiplas seleções.

    Marque como resposta caso tenha sido útil!

    sexta-feira, 17 de outubro de 2014 16:22
  • Deric,

    Estou testando no construtor de consultas do DataSet.

    Eu fiz o select com o IN, mas quando eu coloco dois produtos o sistema não retorna nenhum.

    Segue abaixo o select:

    SELECT        A.FILIAL, A.NOME_VENDEDOR, B.PRODUTO, SUM(B.QTDE) AS QUANTIDADE
    FROM            W_LOJA_VENDA_VENDEDORES AS A INNER JOIN
                             W_LOJA_VENDA_PRODUTO AS B ON A.TICKET = B.TICKET
    WHERE        (A.DATA_VENDA BETWEEN @DATAINI AND @DATAFIM) AND (A.FILIAL NOT IN ('E-COMMERCE')) AND (B.QTDE > 0) AND 
                             (A.NOME_VENDEDOR NOT IN ('VENDEDOR 1')) AND 
                             (B.PRODUTO IN (@PRODUTO)) //Este é o Parâmetro!
    GROUP BY A.FILIAL, A.NOME_VENDEDOR, B.PRODUTO
    ORDER BY A.FILIAL, A.NOME_VENDEDOR, B.PRODUTO


    sexta-feira, 17 de outubro de 2014 16:33
  • Deric,

    Estou testando no construtor de consultas do DataSet.

    Eu fiz o select com o IN, mas quando eu coloco dois produtos o sistema não retorna nenhum.

    Segue abaixo o select:

    SELECT        A.FILIAL, A.NOME_VENDEDOR, B.PRODUTO, SUM(B.QTDE) AS QUANTIDADE
    FROM            W_LOJA_VENDA_VENDEDORES AS A INNER JOIN
                             W_LOJA_VENDA_PRODUTO AS B ON A.TICKET = B.TICKET
    WHERE        (A.DATA_VENDA BETWEEN @DATAINI AND @DATAFIM) AND (A.FILIAL NOT IN ('E-COMMERCE')) AND (B.QTDE > 0) AND 
                             (A.NOME_VENDEDOR NOT IN ('JORGE ALEX', 'JORGE ALEX ANALIA FRANCO', 'JORGE ALEX MOEMA', 'JORGE ALEX MORUMBI')) AND 
                             (B.PRODUTO IN (@PRODUTO)) //Este é o Parâmetro!
    GROUP BY A.FILIAL, A.NOME_VENDEDOR, B.PRODUTO
    ORDER BY A.FILIAL, A.NOME_VENDEDOR, B.PRODUTO

    Exatamente isso, só que do lado do C# você deve passar uma string com os valores separados por virgula para que o IN (SQL) funcione corretamente.
    sexta-feira, 17 de outubro de 2014 16:41
  • Faça um debug e verifique o valor do parâmetro @PRODUTO.
    sexta-feira, 17 de outubro de 2014 16:41
  • Sabe me dizer como devo montar isso no C#

    O que tenho no momento é isto:

    String Produto = Convert.ToString(textBox1.Text);
                
    // TODO: esta linha de código carrega dados na tabela 'DataSet1.PRODUTOS_DATA'. Você pode movê-la ou removê-la conforme necessário.
                this.PRODUTOS_DATATableAdapter.FillbyDATA_PRODUTO(this.DataSet1.PRODUTOS_DATA, DATAINI, DATAFIM, Produto);
    
                this.reportViewer1.RefreshReport();

    sexta-feira, 17 de outubro de 2014 16:47
  • Verifique se o parâmetro Produto está declarado no seu método 
    FillbyDATA_PRODUTO.
    sexta-feira, 17 de outubro de 2014 17:17
  • Sabe me dizer como devo montar isso no C#

    O que tenho no momento é isto:

    String Produto = Convert.ToString(textBox1.Text);
                
    // TODO: esta linha de código carrega dados na tabela 'DataSet1.PRODUTOS_DATA'. Você pode movê-la ou removê-la conforme necessário.
                this.PRODUTOS_DATATableAdapter.FillbyDATA_PRODUTO(this.DataSet1.PRODUTOS_DATA, DATAINI, DATAFIM, Produto);
    
                this.reportViewer1.RefreshReport();


    Segue exemplo como ficaria se baseando em seu código acima:


         String Prod = Produto();
               
                // TODO: esta linha de código carrega dados na tabela 'DataSet1.PRODUTOS_DATA'. Você pode movê-la ou removê-la conforme necessário.
                this.PRODUTOS_DATATableAdapter.FillbyDATA_PRODUTO(this.DataSet1.PRODUTOS_DATA, DATAINI, DATAFIM, Prod);
                this.reportViewer1.RefreshReport();
    
            public string Produto()
            {
                string produto = "agua,cafe,sopa";
                string[] produtos = produto.Split(',');
                string concat = string.Empty;
                try
                {
                    foreach (string prod in produtos)
                    {
                        concat = concat + "\'" + prod + "\',";
                    }
    
                    concat = concat.Remove(concat.Length - 1);
                }
                catch (Exception ex)
                {
                    throw new Exception("Erro ao retornar produtos");
                }
    
                return concat;
            }
    No seu sql vai ficar assim:

    SELECT        A.FILIAL, A.NOME_VENDEDOR, B.PRODUTO, SUM(B.QTDE) AS QUANTIDADE
    FROM            W_LOJA_VENDA_VENDEDORES AS A INNER JOIN
                             W_LOJA_VENDA_PRODUTO AS B ON A.TICKET = B.TICKET
    WHERE        (A.DATA_VENDA BETWEEN @DATAINI AND @DATAFIM) AND (A.FILIAL NOT IN ('E-COMMERCE')) AND (B.QTDE > 0) AND 
                             (A.NOME_VENDEDOR NOT IN ('JORGE ALEX', 'JORGE ALEX ANALIA FRANCO', 'JORGE ALEX MOEMA', 'JORGE ALEX MORUMBI')) AND 
                             (B.PRODUTO IN ('agua','cafe','sopa')) //Este é o Parâmetro!
    GROUP BY A.FILIAL, A.NOME_VENDEDOR, B.PRODUTO
    ORDER BY A.FILIAL, A.NOME_VENDEDOR, B.PRODUTO


    sexta-feira, 17 de outubro de 2014 17:26
  • Ricardo,

    Agora está dando erro na linha do Fillby...

    Antes mesmo de depurar a linha já fica grifada em vermelho e diz que Nenhuma Sobrecarga para o método tem 4 argumentos.

    O SQL Copiei igual o que você passou aí e no C# coloquei:

    private void button1_Click(object sender, EventArgs e)
            {
                DateTime DATAINI = Convert.ToDateTime(textBox2.Text);
                DateTime DATAFIM = Convert.ToDateTime(textBox3.Text);
                //String Prod = Convert.ToString(textBox1.Text);
                String Prod = Produto();
    
                // TODO: esta linha de código carrega dados na tabela 'DataSet1.PRODUTOS_DATA'. Você pode movê-la ou removê-la conforme necessário.
                this.PRODUTOS_DATATableAdapter.FillbyDATA_PRODUTO(this.DataSet1.PRODUTOS_DATA, DATAINI, DATAFIM, Prod);
                this.reportViewer1.RefreshReport();
            }
    
            public string Produto()
            {
                string produto = "agua,cafe,sopa";
                string[] produtos = produto.Split(',');
                string concat = string.Empty;
                try
                {
                    foreach (string prod in produtos)
                    {
                        concat = concat + "\'" + prod + "\',";
                    }
    
                    concat = concat.Remove(concat.Length - 1);
                }
                catch (Exception ex)
                {
                    throw new Exception("Erro ao retornar produtos");
                }
            {
                return concat;
            }
            }
        }
    }


    sexta-feira, 17 de outubro de 2014 19:40
  • Passe a mensagem de erro.
    sexta-feira, 17 de outubro de 2014 19:43
  • Erro 1 Nenhuma sobrecarga para o método 'FillbyDATA_PRODUTO' aceita 4 argumentos C:\Users\douglas.alves\Documents\Visual Studio 2012\Projects\REPORT_APP\REPORT_APP\Form4.cs 32 13 REPORT_APP
    Aviso 2 A variável 'ex' está declarada mas nunca foi usada C:\Users\douglas.alves\Documents\Visual Studio 2012\Projects\REPORT_APP\REPORT_APP\Form4.cs 50 30 REPORT_APP
    sexta-feira, 17 de outubro de 2014 19:49
  • Ricardo???, Mr. GMSOFT filho kkk,

      public string Produto()
            {
                string produto = "agua,cafe,sopa";
                string[] produtos = produto.Split(',');
                string concat = string.Empty;
                try
                {
                    foreach (string prod in produtos)
                    {
                        concat = concat + "\'" + prod + "\',";
                    }
    
                    concat = concat.Remove(concat.Length - 1);
                }
                catch (Exception ex)
                {
                    throw new Exception("Erro ao retornar produtos "+ex.Message);//Coloque o +ex.Message
                }
            {
                return concat;
            }
            }
    

    posta a linha do erro do Form4.cs (linha 32)
    sexta-feira, 17 de outubro de 2014 20:08
  • kkkkk Foi Mal,

    Vi pelo Nome que sugeriu como Resposta...

    então é nessa linha aqui:

    this.PRODUTOS_DATATableAdapter.FillbyDATA_PRODUTO(this.DataSet1.PRODUTOS_DATA, DATAINI, DATAFIM, Prod)

    sexta-feira, 17 de outubro de 2014 20:19
  • Verifica se esse método FillbyDATA_PRODUTO realmente possui quatro parâmetros em sua definição eu creio que a quantidade que você esta passando como parâmetro não é a que esta definida.


    • Editado Mr. GMSOFT sexta-feira, 17 de outubro de 2014 20:38
    sexta-feira, 17 de outubro de 2014 20:38
  • Então,

    No inicio eu tinha 3 parâmetros.

    Que eram dataini, datafim e produto.

    Depois do código que me passou, ficaram so as datas. Produto deixou de ser um parâmetro de filtro. Pelo menos no construtor de consultas só pede o período de data.

    Estava testando agora com o parâmetro @Prod. O código fica correto, a aplicação roda, mas ele não me traz nada.

    sexta-feira, 17 de outubro de 2014 20:49
  • Veja se seu codigo esta igual a este aqui:

    //SQL ORIGINAL NÃO MUDA
    SELECT        A.FILIAL, A.NOME_VENDEDOR, B.PRODUTO, SUM(B.QTDE) AS QUANTIDADE
    FROM            W_LOJA_VENDA_VENDEDORES AS A INNER JOIN
                             W_LOJA_VENDA_PRODUTO AS B ON A.TICKET = B.TICKET
    WHERE        (A.DATA_VENDA BETWEEN @DATAINI AND @DATAFIM) AND (A.FILIAL NOT IN ('E-COMMERCE')) AND (B.QTDE > 0) AND 
                             (A.NOME_VENDEDOR NOT IN ('JORGE ALEX', 'JORGE ALEX ANALIA FRANCO', 'JORGE ALEX MOEMA', 'JORGE ALEX MORUMBI')) AND 
                             (B.PRODUTO IN (@PRODUTO)) //Este é o Parâmetro!
    GROUP BY A.FILIAL, A.NOME_VENDEDOR, B.PRODUTO
    ORDER BY A.FILIAL, A.NOME_VENDEDOR, B.PRODUTO 
    
    
    
    
    String Prod = Produto(textBox1.Text);
               
                // TODO: esta linha de código carrega dados na tabela 'DataSet1.PRODUTOS_DATA'. Você pode movê-la ou removê-la conforme necessário.
     this.PRODUTOS_DATATableAdapter.FillbyDATA_PRODUTO(this.DataSet1.PRODUTOS_DATA, DATAINI, DATAFIM, Prod);
    
                this.reportViewer1.RefreshReport();
    
            public string Produto(string produto)
            {
                string[] produtos = produto.Split(',');
                string concat = string.Empty;
                try
                {
                    foreach (string prod in produtos)
                    {
                        concat = concat + "\'" + prod + "\',";
                    }
    
                    concat = concat.Remove(concat.Length - 1);
                }
                catch (Exception ex)
                {
                    throw new Exception("Erro ao retornar produtos "+ex.Message);
                }
    
                return concat;
            }


    sexta-feira, 17 de outubro de 2014 23:07
  • Então,

    estive a manhã toda efetuando os testes aqui, e o seu código está funcionando corretamente.

    Inclusive, coloquei um MessageBox para me informar oque ele está inserindo dentro do TextBox. Mas infelizmente o sistema não retorna nenhum produto.

    Impressionante, a sintaxe está correta ele está colocando os produtos dentro da variável corretamente, mas não retorna nada.

    O problema agora é o código SQL... Eu fiz alguns testes simples direto no MSSQL declarando variáveis e inserindo mais de um valor e funcionou. Tive que colocar três aspas simples '''Produto'',''Produto2'''. Dessa forma funcionou no MSSQL, o problema tem sido replicar isso no SQL do VS...

    segunda-feira, 20 de outubro de 2014 17:20