none
pesquisar na camada de logica de negocios e atribuir valor para textbox na camada de apresentação RRS feed

  • Pergunta

  • ola pessoal, na camada de apresentação, quando clico em Alterar, consigo obter o codigo do vendedor, quero pesquisar esse codigo de vendedor na camada de logica de negocios, apos fazer essa pesquisa, como atribuo os valores obtidos em logica de negocios e atribuo para os TextBox que estao na camada de apresentação ?

    private void btnalterar_Click(object sender, EventArgs e)
            {
                Tag = "alterar";
                AcessoBancoDados.conectaBase();
                string cod = dataGridView1.CurrentRow.Cells["CODVEN"].Value.ToString();

    •      dto.Codven = int.Parse(cod);

                bll.Alterar(dto);

            }

    -- essa camada é a camada de logica de negocios --

    public bool Alterar(VendedorDTO dto)
            {
                MySqlCommand comandoSql = new MySqlCommand("SELECT * FROM VENDEDORES WHERE CODVEN =" + dto.Codven, AcessoBancoDados.conn);
                MySqlDataReader leitor = comandoSql.ExecuteReader();
                leitor.Read();
                quero atribuir o Nome do Vendedor para TextBox que esta na camada de apresentação
                return true;
            }

    C#

    obrigado.


    terça-feira, 29 de setembro de 2015 13:57

Respostas

  • Porter, você terá que colocar um breakpoint na linha do retorno do seu método Alterar, ou logo após o comando ExecuteReader, pois ao que parece, a sua consulta não está retornando dados, ou você esqueceu de preencher a sua variável Tabela. Então, seu método deveria estar algo em torno disso:

    public DataTable Alterar(VendedorDTO dto)
    {
      DataTable Tabela = new DataTable(); 
      MySqlCommand comandoSql = new MySqlCommand("SELECT * FROM VENDEDORES WHERE CODVEN =" +  dto.Codven, AcessoBancoDados.conn); 
      MySqlDataReader leitor = comandoSql.ExecuteReader();
      Tabela.Load(leitor);// Se não tiver esta linha, você estará apenas retornando uma tabela vazia, e pode estar aí o problema
      return Tabela;// Adicione um breakpoint aqui, e verifique se foram retornados registros
    }


    • Editado Rodrigo CdS quarta-feira, 30 de setembro de 2015 11:55
    • Marcado como Resposta Porter Porter quarta-feira, 30 de setembro de 2015 13:23
    quarta-feira, 30 de setembro de 2015 11:55
  • Voce tem de retorar uma lista ou dataset ou datatable, ou datareader, so assim podes atribuir na camada de apresentacao o resultado.

    o teu public bool alterar retorna um valor verdadeiro ou falso, e impossivel desta forma.

    troca pra....

    Public DataTable Alterar(VendedorDTO dto)

    {

    DataTable Tabela = new DataTable();

    codigo aki

    return Tabela;

    }

    Foreach(DataRow row in Alterar(dt0)

    {

    TextBox.Text=row[0].ToString();

    TextBox.Text =row[1].ToString();

    }


    A flower cannot blossom without sunshine, and man cannot live without love.

    • Marcado como Resposta Marcos SJ terça-feira, 29 de setembro de 2015 18:23
    terça-feira, 29 de setembro de 2015 14:14
    Moderador
  • Olá, Porter!

      Basicamente você precisa escrever este código:

    if (leitor.Read())
    {
       textBox1.Text = leitor.GetString(1); //Sendo que 1 é o índice da coluna com a informação desejada
    }
    

    Para saber mais sobre o DataReader, leia este artigo

    Bom trabalho!

    • Marcado como Resposta Marcos SJ terça-feira, 29 de setembro de 2015 18:23
    terça-feira, 29 de setembro de 2015 15:43

Todas as Respostas

  • Voce tem de retorar uma lista ou dataset ou datatable, ou datareader, so assim podes atribuir na camada de apresentacao o resultado.

    o teu public bool alterar retorna um valor verdadeiro ou falso, e impossivel desta forma.

    troca pra....

    Public DataTable Alterar(VendedorDTO dto)

    {

    DataTable Tabela = new DataTable();

    codigo aki

    return Tabela;

    }

    Foreach(DataRow row in Alterar(dt0)

    {

    TextBox.Text=row[0].ToString();

    TextBox.Text =row[1].ToString();

    }


    A flower cannot blossom without sunshine, and man cannot live without love.

    • Marcado como Resposta Marcos SJ terça-feira, 29 de setembro de 2015 18:23
    terça-feira, 29 de setembro de 2015 14:14
    Moderador
  • Olá, Porter!

      Basicamente você precisa escrever este código:

    if (leitor.Read())
    {
       textBox1.Text = leitor.GetString(1); //Sendo que 1 é o índice da coluna com a informação desejada
    }
    

    Para saber mais sobre o DataReader, leia este artigo

    Bom trabalho!

    • Marcado como Resposta Marcos SJ terça-feira, 29 de setembro de 2015 18:23
    terça-feira, 29 de setembro de 2015 15:43
  • na camada de negocios estou fazendo assim:

    public DataTable Alterar(VendedorDTO dto)
    {
     DataTable Tabela = new DataTable(); 
     MySqlCommand comandoSql = new MySqlCommand("SELECT * FROM VENDEDORES WHERE CODVEN =" +  dto.Codven, AcessoBancoDados.conn); 
     MySqlDataReader leitor = comandoSql.ExecuteReader();
     return Tabela;
    }

    nao estou conseguindo na camada de apresentacao atribuir aos textbox, nao consigo acessar a Tabela la da camada de negocios, como faço para acessa-la ?

    private void btnalterar_Click(object sender, EventArgs e)
    {
    Tag = "alterar";
    AcessoBancoDados.conectaBase();
    string cod = dataGridView1.CurrentRow.Cells["CODVEN"].Value.ToString();

    dto.Codven = int.Parse(cod);
    bll.Alterar(dto);

    txtnome.text =      <-- aqui e a minha duvida para acessar a Tabela 


    • Editado Porter Porter terça-feira, 29 de setembro de 2015 17:00
    terça-feira, 29 de setembro de 2015 16:58
  • Bom, neste caso no método Alterar faltou adicionar o código "Tabela.Load(leitor);" e, aí sim, "return Tabela;". E não esqueça de abrir e fechar a conexão caso não o tenha feito. No evento btnalterar_Click, isto deverá funcionar:

    DataTable dt = bll.Alterar(dto);
    txtnome.Text = dt.Rows.Cast<DataRow>().Select(s => s["NomeDoCampo"].ToString()).FirstOrDefault();

    Este código obtém o primeiro registro. Mas esta é uma possibilidade de solução.

    terça-feira, 29 de setembro de 2015 18:19
  • ola Rodrigo, dessa forma o txtnome.Text retorna branco ("")

    DataTable dt = bll.Alterar(dto); txtnome.Text = dt.Rows.Cast<DataRow>().Select(s => s["Nome"].ToString()).FirstOrDefault();

    assim:

    txtnome.Text retorna System.data.DataRowColletion

    DataTable dt = bll.Alterar(dto); txtnome.Text = dt.Rows.ToString();

    terça-feira, 29 de setembro de 2015 19:22
  • ola Rodrigo, dessa forma o txtnome.Text retorna branco ("")

    DataTable dt = bll.Alterar(dto); txtnome.Text = dt.Rows.Cast<DataRow>().Select(s => s["Nome"].ToString()).FirstOrDefault();

    assim:

    txtnome.Text retorna System.data.DataRowColletion

    DataTable dt = bll.Alterar(dto); txtnome.Text = dt.Rows.ToString();

    Na sua tabela vendedores você tem um campo chamado "Nome"? Eu coloquei este campo como exemplo, mas o nome do campo deve corresponder ao nome que existe na sua consulta, ou informar o índice da coluna. O segundo exemplo está errado. Se for fazer desta forma deveria ser txtnome.Text = dt.Rows[0][índiceColuna].ToString(); por exemplo.
    terça-feira, 29 de setembro de 2015 19:57
  • bom dia Rodrigo, sim tem o campo "Nome", com esse comando txtnome.Text retorna branco("")

    txtnome.Text = dt.Rows.Cast<DataRow>().Select(s => s["Nome"].ToString()).FirstOrDefault();

    se fizer assim, da a seguinte mensagem: Não há linha na posição 1

    DataTable dt = bll.Alterar(dto);

    try
    {
    txtnome.Text = dt.Rows[1].ToString();
    }
    catch (Exception ex)
    {
     MessageBox.Show(ex.Message);
    }

    quarta-feira, 30 de setembro de 2015 11:37
  • Porter, você terá que colocar um breakpoint na linha do retorno do seu método Alterar, ou logo após o comando ExecuteReader, pois ao que parece, a sua consulta não está retornando dados, ou você esqueceu de preencher a sua variável Tabela. Então, seu método deveria estar algo em torno disso:

    public DataTable Alterar(VendedorDTO dto)
    {
      DataTable Tabela = new DataTable(); 
      MySqlCommand comandoSql = new MySqlCommand("SELECT * FROM VENDEDORES WHERE CODVEN =" +  dto.Codven, AcessoBancoDados.conn); 
      MySqlDataReader leitor = comandoSql.ExecuteReader();
      Tabela.Load(leitor);// Se não tiver esta linha, você estará apenas retornando uma tabela vazia, e pode estar aí o problema
      return Tabela;// Adicione um breakpoint aqui, e verifique se foram retornados registros
    }


    • Editado Rodrigo CdS quarta-feira, 30 de setembro de 2015 11:55
    • Marcado como Resposta Porter Porter quarta-feira, 30 de setembro de 2015 13:23
    quarta-feira, 30 de setembro de 2015 11:55
  • obrigado Rodrigo, agora deu certo o comando abaixo, eu estava fazendo errado, por isso retornava branco.

    estava fazendo assim:

    txtnome.Text   = dt.Rows[1].ToString();

    fiz assim, e deu certo

     txtnome.Text   = dt.Rows[0][1].ToString();

    quarta-feira, 30 de setembro de 2015 13:23