none
Multi ComboBox com .txt RRS feed

  • Pergunta

  • Pessoal tinha criado um programa onde uma comboBox lia os dados de o .txt

    E utilizei do seguinte código:

    StreamReader sr = new StreamReader(@"C:\endereço do arquivo txt");
    string line = sr.ReadLine();
    while (line != null)
    {
    combobox1.Itens.Add(line);
    line = sr.ReadLine();
    }

    Até ai tudo bem, caso eu adicionasse algo no arquivo, seria adicionado na comboBox normalmente. O problema chega quando eu tento criar uma versão com 4 comboBox, pois tentei ultilizar deste código e se editar qualquer um dos arquivos responssavel pelo comboBox o programa não abre. O mais perto que cheguei foi isso:

            private void Consagri_Load(object sender, EventArgs e)
            {
                StreamReader cafe = new StreamReader(@"C:\Users\Public\Documents\ConsAgri\Café\Produtos.txt");
                StreamReader milho = new StreamReader(@"C:\Users\Public\Documents\ConsAgri\Milho\Produtos.txt");
                StreamReader soja = new StreamReader(@"C:\Users\Public\Documents\ConsAgri\Soja\Produtos.txt");
                StreamReader silagem = new StreamReader(@"C:\Users\Public\Documents\ConsAgri\Silagem\Produtos.txt");

                string lncafe = cafe.ReadLine();
                string lnmilho = milho.ReadLine();
                string lnsoja = soja.ReadLine();
                string lnsilagem = silagem.ReadLine();

                while (lncafe != null)
                    while (lnmilho != null)
                        while (lnsoja != null)
                            while (lnsilagem != null)
                {
                    cbcafe.Items.Add(lncafe);
                                cbmilho.Items.Add(lnmilho);
                                cbsoja.Items.Add(lnsoja);
                                cbsilagem.Items.Add(lnsilagem);

                    lncafe = cafe.ReadLine();
                                lnmilho = milho.ReadLine();
                                lnsoja = soja.ReadLine();
                                lnsilagem = silagem.ReadLine();
                }
            }

    Mas se eu editar, ele não abre. Alguem pode ajudar?

     

    terça-feira, 13 de setembro de 2016 22:34

Respostas

  • Pelo que entendi você quer carregar 4 combobox com o conteudo de 4 arquivos distintos sera que é isso ?
    Se for porque você não cria a rotina que lê o arquivo .txt 01 carrega a combo 01 depois o arquivo .txt 02 carrega a combobox 02 ate o 04 um de cada vez ou um depende do outro ?

    Caso um dependenda do outro vc pode carregar cada arquivo para um DataTable diferente arquivo 01 => datatable 01 ; arquivo 02 => datatable 02 e depois criar uma rotina que carregue a combobox 01 e se a combobox 02 tiver uma dependencia de carga do arquivo 01 você faz a busca dos registros do datatable02 referente ao registro "PAI" contido no datatatable 01 e assim por diante


    Junior

    • Marcado como Resposta TTI Thiago quinta-feira, 15 de setembro de 2016 14:17
    terça-feira, 13 de setembro de 2016 23:57
  • Você esta com um monte de whiles aninhados, caso só tenha um item no primeiro só vai ler um item dos outros, separe este código, ou realmente um depende do outro?

    Se sim as alterações tem que respeitar uma logica para que sua rotina funcione.

    Outro detalhe, porque utilizar arquivos txt, por que não criar tabelas para que possa montar estes combos ?

    Se a resposta contribuiu com seu aprendizado por favor marque como Útil
    Se solucionou seu problema por favor marque como Resposta
    Atenção, se seu problema foi resolvido não deixe o post aberto 

    Visite : www.codigoexpresso.com.br

     



    quarta-feira, 14 de setembro de 2016 02:13
  • Se são independentes separa este código, faça um de cada vez, vá mais longe, crie um procedimento único onde passe o nome do arquivo e o elemento combo box que quer e monte o que precisa.

    Se a resposta contribuiu com seu aprendizado por favor marque como Útil
    Se solucionou seu problema por favor marque como Resposta
    Atenção, se seu problema foi resolvido não deixe o post aberto 

    Visite : www.codigoexpresso.com.br

    • Marcado como Resposta TTI Thiago quinta-feira, 15 de setembro de 2016 14:16
    quarta-feira, 14 de setembro de 2016 22:24
  • Sua primeira rotina estava quase certa, aproveitei ela como base para criar o procedimento a seguir

    public ComboBox getComboBox(ComboBox CB, string FileName)
    {
        CB.Items.Clear();
        int Contador = 0;
    
        if (File.Exists(FileName))
        {
    
            using (StreamReader sr = new StreamReader(FileName))
            {
                string line = sr.ReadLine();
                while (line != null)
                {
                    CB.Items.Insert(Contador, line.ToString());
                    Contador++;
    
                    line = sr.ReadLine();
                }
            }
        }
        return CB;
    }

    para utilizar carregue cada uma de suas combos passando como parâmetro a combo e o caminho+nome do arquivo como a seguir

     cbcafe = getComboBox(cbcafe, @"C:\Users\Public\Documents\ConsAgri\Café\Produtos.txt");
     cbmilho = getComboBox(cbmilho, @"C:\Users\Public\Documents\ConsAgri\Milho\Produtos.txt");

    Acredito que assim vai resolver seu problema

    Se tiver interesse assista meu curso de asp.net MVC com C# vai aprender bastante lá, segue o link

    Curso Grátis de Asp.Net MVC com C#

    Se a resposta contribuiu com seu aprendizado por favor marque como Útil
    Se solucionou seu problema por favor marque como Resposta
    Atenção, se seu problema foi resolvido não deixe o post aberto 

    Visite : www.codigoexpresso.com.br

    • Sugerido como Resposta Código Expresso quarta-feira, 14 de setembro de 2016 23:07
    • Marcado como Resposta TTI Thiago quinta-feira, 15 de setembro de 2016 14:16
    quarta-feira, 14 de setembro de 2016 23:07
  • Colega você não tem que editar nada, a rotina esta pronta, você não tem que alterar, só usar, ela recebe como parâmetro seu ComboBox e o caminho do arquivo que tem que ler, basta carregar seu ComboBox conforme procedimento.

    Deixe a função getComboBox como esta sem mexer em nada, 

    carrege seus combos passando os paramentro assim 

     cbcafe = getComboBox(cbcafe, @"C:\Users\Public\Documents\ConsAgri\Café\Produtos.txt");
     cbmilho = getComboBox(cbmilho, @"C:\Users\Public\Documents\ConsAgri\Milho\Produtos.txt");

    Só isso, depois de executar o procedimento sua ComboBox vai estar com os dados desejados

    Se a resposta contribuiu com seu aprendizado por favor marque como Útil
    Se solucionou seu problema por favor marque como Resposta
    Atenção, se seu problema foi resolvido não deixe o post aberto 

    Visite : www.codigoexpresso.com.br


    • Editado Código Expresso quinta-feira, 15 de setembro de 2016 02:35
    • Marcado como Resposta TTI Thiago quinta-feira, 15 de setembro de 2016 14:16
    quinta-feira, 15 de setembro de 2016 02:34
  • A dependencia que eu menciounei é assim caso um combobox seja carregado com dependencia de outro
    Ex:

    Combobox2 depende de algum registro do combobox1 para ser carregado. Mas seu caso é diferente eles são independentes ou seja cada arquivo carrega um combobox distinto

    Você pode fazer assim:
    string lncafe = String.Empty;
    StreamReader cafe = new StreamReader(@"C:\Users\Public\Documents\ConsAgri\Café\Produtos.txt");
    cbcafe.Items.Clear();
    while (lncafe != null)
    {
              lncafe = cafe.ReadLine();
             cbcafe.Items.Add(lncafe);}
    cafe.close();

    Você teria que fazer um para cada arquivo seu, ou criar uma rotina que vc passe o caminho do arquivo e o nome do objeto combobox que tera que ser carregado isso ficaria melhor ainda.


    Junior

    • Marcado como Resposta TTI Thiago quinta-feira, 15 de setembro de 2016 14:16
    quinta-feira, 15 de setembro de 2016 10:48
  • Colega, a ideia esta ai, para desenvolver da maneira que quer teria que entender o projeto e o relacionamento entre os combos caso contrario cairíamos no mesmo erro inicial, qualquer alteração e os combos não carregariam corretamente.

    Se a resposta contribuiu com seu aprendizado por favor marque como Útil
    Se solucionou seu problema por favor marque como Resposta
    Atenção, se seu problema foi resolvido não deixe o post aberto 

    Visite : www.codigoexpresso.com.br

    • Marcado como Resposta TTI Thiago quinta-feira, 15 de setembro de 2016 14:16
    quinta-feira, 15 de setembro de 2016 13:50

Todas as Respostas

  • Pelo que entendi você quer carregar 4 combobox com o conteudo de 4 arquivos distintos sera que é isso ?
    Se for porque você não cria a rotina que lê o arquivo .txt 01 carrega a combo 01 depois o arquivo .txt 02 carrega a combobox 02 ate o 04 um de cada vez ou um depende do outro ?

    Caso um dependenda do outro vc pode carregar cada arquivo para um DataTable diferente arquivo 01 => datatable 01 ; arquivo 02 => datatable 02 e depois criar uma rotina que carregue a combobox 01 e se a combobox 02 tiver uma dependencia de carga do arquivo 01 você faz a busca dos registros do datatable02 referente ao registro "PAI" contido no datatatable 01 e assim por diante


    Junior

    • Marcado como Resposta TTI Thiago quinta-feira, 15 de setembro de 2016 14:17
    terça-feira, 13 de setembro de 2016 23:57
  • Sim são combobox independentes, cada uma acessa um arquivo distinto, qual código posso usar para criar essa "rotina"?

    Sobre dependência, n sei se entendi, mas por exemplo: é como se combobox1 e combobox2 tivesses 5 linhas, mas depende da linha especifica da combobox1 para eu usar algumas da combobox2? Se for isso também pode ser interessante. 

    quarta-feira, 14 de setembro de 2016 00:16
  • Você esta com um monte de whiles aninhados, caso só tenha um item no primeiro só vai ler um item dos outros, separe este código, ou realmente um depende do outro?

    Se sim as alterações tem que respeitar uma logica para que sua rotina funcione.

    Outro detalhe, porque utilizar arquivos txt, por que não criar tabelas para que possa montar estes combos ?

    Se a resposta contribuiu com seu aprendizado por favor marque como Útil
    Se solucionou seu problema por favor marque como Resposta
    Atenção, se seu problema foi resolvido não deixe o post aberto 

    Visite : www.codigoexpresso.com.br

     



    quarta-feira, 14 de setembro de 2016 02:13
  • Eles são independentes, eu já tentei separa-los, de diversas formas, mas tive falha em todas, será que pode me ajudar com isso? Eu queria fazer com arquivos .txt

    • Editado TTI Thiago quarta-feira, 14 de setembro de 2016 08:14
    quarta-feira, 14 de setembro de 2016 02:50
  • Se são independentes separa este código, faça um de cada vez, vá mais longe, crie um procedimento único onde passe o nome do arquivo e o elemento combo box que quer e monte o que precisa.

    Se a resposta contribuiu com seu aprendizado por favor marque como Útil
    Se solucionou seu problema por favor marque como Resposta
    Atenção, se seu problema foi resolvido não deixe o post aberto 

    Visite : www.codigoexpresso.com.br

    • Marcado como Resposta TTI Thiago quinta-feira, 15 de setembro de 2016 14:16
    quarta-feira, 14 de setembro de 2016 22:24
  • Tentei separa-los colocando um de cada vez, ou ate mesmo com outros códigos, mas nenhuma tentativa com sucesso, foi por isso que vim aqui. Para achar alguém que possa me ajudar com uma nova forma de fazer isso, mas sem sair do conceito de usar os arquivos .txt
    quarta-feira, 14 de setembro de 2016 22:44
  • Sua primeira rotina estava quase certa, aproveitei ela como base para criar o procedimento a seguir

    public ComboBox getComboBox(ComboBox CB, string FileName)
    {
        CB.Items.Clear();
        int Contador = 0;
    
        if (File.Exists(FileName))
        {
    
            using (StreamReader sr = new StreamReader(FileName))
            {
                string line = sr.ReadLine();
                while (line != null)
                {
                    CB.Items.Insert(Contador, line.ToString());
                    Contador++;
    
                    line = sr.ReadLine();
                }
            }
        }
        return CB;
    }

    para utilizar carregue cada uma de suas combos passando como parâmetro a combo e o caminho+nome do arquivo como a seguir

     cbcafe = getComboBox(cbcafe, @"C:\Users\Public\Documents\ConsAgri\Café\Produtos.txt");
     cbmilho = getComboBox(cbmilho, @"C:\Users\Public\Documents\ConsAgri\Milho\Produtos.txt");

    Acredito que assim vai resolver seu problema

    Se tiver interesse assista meu curso de asp.net MVC com C# vai aprender bastante lá, segue o link

    Curso Grátis de Asp.Net MVC com C#

    Se a resposta contribuiu com seu aprendizado por favor marque como Útil
    Se solucionou seu problema por favor marque como Resposta
    Atenção, se seu problema foi resolvido não deixe o post aberto 

    Visite : www.codigoexpresso.com.br

    • Sugerido como Resposta Código Expresso quarta-feira, 14 de setembro de 2016 23:07
    • Marcado como Resposta TTI Thiago quinta-feira, 15 de setembro de 2016 14:16
    quarta-feira, 14 de setembro de 2016 23:07
  • Tenho praticamente certeza que entendi errado. O mais perto que cheguei editando o código foi assim:

    public ComboBox getComboBox(ComboBox cbcafe, string Produtos)
            {
                cbcafe.Items.Clear();
                int Contador = 0;

                if (File.Exists(@"C:\Users\Public\Documents\ConsAgri\Silagem\Produtos.txt"))
                {

                    using (StreamReader cafe = new StreamReader(@"C:\Users\Public\Documents\ConsAgri\Silagem\Produtos.txt"))
                    {
                        string lncafe = cafe.ReadLine();
                        while (lncafe != null)
                        {
                            cbcafe.Items.Insert(Contador, lncafe.ToString());
                            Contador++;

                            lncafe = cafe.ReadLine();
                        }
                    }
                }
                return cbcafe;
            }

    O programa não abria antes quando havia algum dado no bloco de notas, isso foi resolvido, porem ele não está lendo o conteúdo agora.


    quinta-feira, 15 de setembro de 2016 01:08
  • Colega você não tem que editar nada, a rotina esta pronta, você não tem que alterar, só usar, ela recebe como parâmetro seu ComboBox e o caminho do arquivo que tem que ler, basta carregar seu ComboBox conforme procedimento.

    Deixe a função getComboBox como esta sem mexer em nada, 

    carrege seus combos passando os paramentro assim 

     cbcafe = getComboBox(cbcafe, @"C:\Users\Public\Documents\ConsAgri\Café\Produtos.txt");
     cbmilho = getComboBox(cbmilho, @"C:\Users\Public\Documents\ConsAgri\Milho\Produtos.txt");

    Só isso, depois de executar o procedimento sua ComboBox vai estar com os dados desejados

    Se a resposta contribuiu com seu aprendizado por favor marque como Útil
    Se solucionou seu problema por favor marque como Resposta
    Atenção, se seu problema foi resolvido não deixe o post aberto 

    Visite : www.codigoexpresso.com.br


    • Editado Código Expresso quinta-feira, 15 de setembro de 2016 02:35
    • Marcado como Resposta TTI Thiago quinta-feira, 15 de setembro de 2016 14:16
    quinta-feira, 15 de setembro de 2016 02:34
  • A dependencia que eu menciounei é assim caso um combobox seja carregado com dependencia de outro
    Ex:

    Combobox2 depende de algum registro do combobox1 para ser carregado. Mas seu caso é diferente eles são independentes ou seja cada arquivo carrega um combobox distinto

    Você pode fazer assim:
    string lncafe = String.Empty;
    StreamReader cafe = new StreamReader(@"C:\Users\Public\Documents\ConsAgri\Café\Produtos.txt");
    cbcafe.Items.Clear();
    while (lncafe != null)
    {
              lncafe = cafe.ReadLine();
             cbcafe.Items.Add(lncafe);}
    cafe.close();

    Você teria que fazer um para cada arquivo seu, ou criar uma rotina que vc passe o caminho do arquivo e o nome do objeto combobox que tera que ser carregado isso ficaria melhor ainda.


    Junior

    • Marcado como Resposta TTI Thiago quinta-feira, 15 de setembro de 2016 14:16
    quinta-feira, 15 de setembro de 2016 10:48
  • Colega, a ideia esta ai, para desenvolver da maneira que quer teria que entender o projeto e o relacionamento entre os combos caso contrario cairíamos no mesmo erro inicial, qualquer alteração e os combos não carregariam corretamente.

    Se a resposta contribuiu com seu aprendizado por favor marque como Útil
    Se solucionou seu problema por favor marque como Resposta
    Atenção, se seu problema foi resolvido não deixe o post aberto 

    Visite : www.codigoexpresso.com.br

    • Marcado como Resposta TTI Thiago quinta-feira, 15 de setembro de 2016 14:16
    quinta-feira, 15 de setembro de 2016 13:50
  • Pessoal obrigado mesmo pela ajuda, consegui aqui graças a ajuda de vocês. Parece que fazer as coisas simples é mais difíceis que as complexas rsrs. Mas valeu pela ajuda pessoal.
    quinta-feira, 15 de setembro de 2016 14:15