none
Navegação entre registros utilizando DataTable RRS feed

  • Pergunta

  • Olá pessoal tudo bem?

    Estou com duvidas quanto a navegação de registros utilizando datatable.
    É o seguinte, vou resumir para ficar mais facil o entendimento.
    Tenho um formulario de cadastro com 2 textbox: txtCodigo e txtRazaoSocial, minha intenção é utilizar os botões primeiro, proximo, anterior e ultimo para fazer a navegação entre estes campos TextBox.
    Estou desenvolvendo o projeto em 3 camadas.

    Camada de Acesso a dados:
    Preenche um DataTable:
    public DataTable ExecuteDataTable(string commandtext)  
            {  
                DataTable dt = null;  
                SqlDataAdapter da = null;  
                DataSet ds = null;  
                try  
                {  
                    cmd.CommandText = commandtext;  
                    da = new SqlDataAdapter();  
                    da.SelectCommand = ((SqlCommand)(cmd));  
                    ds = new DataSet();  
                    dt = new DataTable();  
                    da.Fill(dt);  
                }  
                catch (Exception ex)  
                {  
     
                    if (handleErrors)  
                    {  
                        strLastError = ex.Message;  
                    }  
                    else  
                    {  
                        throw;  
                    }  
                }  
                finally  
                {  
                    this.Close();  
                }  
                return dt;  
            } 

    Camada de Regra de Negocio:

    public class ClienteBLL  
        {  
            private DataSet ds = new DataSet();  
            private DataTable dt = new DataTable();  
            private DataRow dr = null;  
     
            private int _CodCli;  
            private string _RazaoSocial;  
     
            public int CodCli  
            {  
                get  
                {  
                    return _CodCli;  
                }  
                set  
                {  
                    _CodCli = value;  
                }  
            }  
     
            public string RazaoSocial  
            {  
                get  
                {  
                    return _RazaoSocial;  
                }  
                set  
                {  
                    _RazaoSocial = value;  
                }  
            }  
     
            public void ExibirDados(int indice)  
            {  
                AcessoDados db = new AcessoDados(CommandType.Text);  
                int qtdeRegistros;  
                this.dt = db.ExecuteDataTable("select * from TBCliente");  
                thisthis.dr = this.dt.Rows[indice];  
                CodCli = (int)dr["CodCli"];  
                RazaoSocial = (string)dr["RazaoSocial"];  
                 
            }  

    Camada de Apresentação:

    public partial class wucCliFor : System.Web.UI.UserControl  
    {  
       protected void Page_Load(object sender, EventArgs e)  
       {  
          ClienteBLL cliente = new ClienteBLL();  
          //Carrega para o primeiro registro da tabela  
          indice = 0;  
          cliente.ExibirDados(indice);  
          CarregaDados();  
       }  
         
       public void CarregaDados()  
       {  
         ClienteBLL cliente = new ClienteBLL();  
         txtCodigo.Text = Convert.ToString(cliente.CodCli);  
         txtRazaoSocial.Text = cliente.RazaoSocial;  
       }  
     
       protected void btnProximo_Click(object sender, EventArgs e)  
       {  
          ClienteBLL cliente = new ClienteBLL();  
          indiceindice = indice + 1;  
          cliente.ExibirDados(indice);  
          CarregaDados();  
       } 

    O problema é que quando clico no botão btnProximo e a pagina é carregada, os campos: txtCodigo.text = 0 e o txtRazaoSocial=" "
    pq não está sendo inserido os valores que estão em CodCli e RazaoSocial que estão na camada de regra de negocio e tambem não esta incrementando o indice.

    Desde ja agradeço pela ajuda.
    segunda-feira, 16 de março de 2009 20:32

Respostas

  • O que acontece é que você esta indo ao banco toda e está trazendo toda a coleção "select * from TBCliente" acredito que não é necessário você fazer essa consulta sempre, uma vez que você já tenha os dados em um datatable, você pode amarzenar em uma session e navegar pelos dados utilizando o metodo select do dt.select()

    ex.

    ' no load
    session(DataTable) = dt


    dt = session(DataTable)

    ' Primeira linha
    For Each vRow As DataRow In dt.select(CodCli = 1)
       
        session(indice) =  vRow(CodCli)   

        txtCodigo.Text = vRow(CodCli)  
        txtRazaoSocial.Text = vRow(RazaoSocial)

    Next


    ' proxima linha
    dim i as interger = session(indice)
    For Each vRow As DataRow In dt.select(CodCli = i + 1)
       
        session(indice) =  vRow(CodCli)   

        txtCodigo.Text = vRow(CodCli)  
        txtRazaoSocial.Text = vRow(RazaoSocial)

    Next


    ' Linha anterior
    dim i as interger = session(indice)

    For Each vRow As DataRow In dt.select(CodCli = i - 1)
       
        session(indice) =  vRow(CodCli)   

        txtCodigo.Text = vRow(CodCli)  
        txtRazaoSocial.Text = vRow(RazaoSocial)

    Next



    Bom vê se te ajuda!
    inté








    Rafael N. Miranda
    terça-feira, 17 de março de 2009 14:03

Todas as Respostas

  • O que acontece é que você esta indo ao banco toda e está trazendo toda a coleção "select * from TBCliente" acredito que não é necessário você fazer essa consulta sempre, uma vez que você já tenha os dados em um datatable, você pode amarzenar em uma session e navegar pelos dados utilizando o metodo select do dt.select()

    ex.

    ' no load
    session(DataTable) = dt


    dt = session(DataTable)

    ' Primeira linha
    For Each vRow As DataRow In dt.select(CodCli = 1)
       
        session(indice) =  vRow(CodCli)   

        txtCodigo.Text = vRow(CodCli)  
        txtRazaoSocial.Text = vRow(RazaoSocial)

    Next


    ' proxima linha
    dim i as interger = session(indice)
    For Each vRow As DataRow In dt.select(CodCli = i + 1)
       
        session(indice) =  vRow(CodCli)   

        txtCodigo.Text = vRow(CodCli)  
        txtRazaoSocial.Text = vRow(RazaoSocial)

    Next


    ' Linha anterior
    dim i as interger = session(indice)

    For Each vRow As DataRow In dt.select(CodCli = i - 1)
       
        session(indice) =  vRow(CodCli)   

        txtCodigo.Text = vRow(CodCli)  
        txtRazaoSocial.Text = vRow(RazaoSocial)

    Next



    Bom vê se te ajuda!
    inté








    Rafael N. Miranda
    terça-feira, 17 de março de 2009 14:03
  • Obrigado Rafael pela ajuda

    vou tentar implementar essa forma, é que a forma que eu implementei para resolver este problema eu não gostei.

      
    quarta-feira, 18 de março de 2009 13:24