none
Como gerar sequência numerica em ordem crescente no C#?

    Question

  • Olá Pessoal!

    Como faço no C# para gerar uma numeração automática para um determinado TextBox em ordem crescente?

    Fiz um método utilizando a classe Random, mas, a geração é aleatória, preciso que gere uma sequência crescente!

    Este é o código que gera a sequência aleatória:

    private string GeraSequencia(int length)
    {
      Random rnd = new Random();
      string numero = "";
    
      for (int i = 0; i < length; i++)
      {
        numero += rnd.Next(0, 55);
      }
      return numero.Substring(0, length);
    }
    

    Alguém poderia me ajudar com esta dificuldade?

    Obrigado!

    Atenciosamente,

     


    Sérgio Pitta
    Tuesday, November 09, 2010 8:10 PM

Answers

  • Amigo, veja se é mais ou menos assim que vc quer

    private List<string> GeraSequencia(int length,int tamanhoPrateleira)
      {
        List<string> codigos = new List<string>();
        List<char> alfabeto = Enumerable.Range('a', 'z'-'a'+1).Select(c => (char)c).ToList();
        const int qtdCompartimento = 6;
        int compartimento = 0;
        int prateleira = 0;
        int cont = 1;
    
        while (prateleira <= tamanhoPrateleira)
        {
          while (compartimento < length)
          {
            while (cont <= qtdCompartimento)
            {
              codigos.Add(string.Format("{0}{1}/00{2}", alfabeto[compartimento].ToString().ToUpper(), prateleira + 1, cont));
              cont++;
            }
            compartimento++;
            cont = 1;
          }
          compartimento = 0;
          prateleira++;
        }
    
        return codigos;
      }
    


    Olavo Oliveira Neto
    Se for útil marque como resposta e faça um Developer feliz :)
    • Marked as answer by Sérgio Pitta Wednesday, November 10, 2010 12:48 PM
    Wednesday, November 10, 2010 11:46 AM
    Moderator
  • Faça assim:

     private void button1_Click(object sender, EventArgs e)
      {
       textBox1.Text = GeraSequencia(4, 6).Aggregate((a,b)=>a+"; "+b);
      }
    
    


    Olavo Oliveira Neto
    Se for útil marque como resposta e faça um Developer feliz :)
    • Marked as answer by Sérgio Pitta Wednesday, November 10, 2010 12:47 PM
    Wednesday, November 10, 2010 12:28 PM
    Moderator

All replies

  • Sérgio,

    Isto depende do que você está querendo fazer, por que você tem que gerar este sequencial? Como ele seria incrementado?

    Se for um TextBox bindado a um DataTable por exemplo, você poderia usar o AutoIncrement:

    http://msdn.microsoft.com/en-us/library/system.data.datacolumn.autoincrement.aspx

    Você pode usar também campos auto-incremento do banco de dados ou Generators, por isso depende de o que você quer fazer.

    at.,


    Rogério de Resende Ohashi | Ohashi.NET (.NET, Security, C#, WinForms, WCF, Workflow, Azure, Windows Phone, Mono)
    Tuesday, November 09, 2010 8:31 PM
    Moderator
  • S,

     

        Se é crescente, use o último número gerado como parâmetro para o menor valor do Next.

     

    private
     string
     GeraSequencia(int
     length)
    {
    Random rnd = new Random();
    string numero = "" ;
    int val = 0;

    for (int i = 0; i < length; i++)
    {
    val = rnd.Next(val, val+55);
    numero += val;
    }
    return numero.Substring(0, length);
    }
    Tuesday, November 09, 2010 8:31 PM
  • Ricardo,

    Implementei sua idéia, mas, continuou gerando aleatório!

    Obrigado pelo feed...

    Att,

     


    Sérgio Pitta
    Tuesday, November 09, 2010 10:58 PM
  • Rogério,

    Vou precisar dessa sequência para construir um código para controle de prateleiras, exempo:

    Uma prateleira possui 5 compartimentos, então o código irá gerar para o primeiro espaço do compartimento este código: A1/0001, cada compartimento possui 6 espaços, quando preencher o espaço A1/0006, pular para o próximo compartimento B1/0007 e assim por diante até atingir o último compartimento da prateleira, caso isso ocorra o código irá gerar o primeiro registro da prateleira 2, A2/0031, onde a letra se refere a cada compartimento e o número, a prateleira. Então, preciso desse código gerando sequencialmente de 1,2,3...

    Tentei me expressar da melhor forma!

    Obrigado pelo feed...

    Att,

     


    Sérgio Pitta
    Tuesday, November 09, 2010 11:16 PM
  • Sérgio,

    No seu caso, pelo que entendi, para gerar uma sequência, é só não utilizar o Random (rnd.Next), mas sim, incrementar a sua variável numero...

    Ao invés de:

    numero += val;

    Tente:

    numero++;

    E aí, obviamente, você não precisa de todo aquele esquema de criar uma instância de Random e tudo mais...

    Não é isso?


    André Alves de Lima
    Visite o meu site: http://www.andrealveslima.com.br
    Me siga no Twitter: @andrealveslima
    Wednesday, November 10, 2010 11:13 AM
    Moderator
  • Correto,

    Então você precisa de gerar um número sequencial, por prateleira... ainda esta complicado para poder te ajudar porque não sabemos como é o seu form, você poderia explicar mais detalhadamente como esta tela é e como ela funciona?

    at.,


    Rogério de Resende Ohashi | Ohashi.NET (.NET, Security, C#, WinForms, WCF, Workflow, Azure, Windows Phone, Mono)
    Wednesday, November 10, 2010 11:41 AM
    Moderator
  • Amigo, veja se é mais ou menos assim que vc quer

    private List<string> GeraSequencia(int length,int tamanhoPrateleira)
      {
        List<string> codigos = new List<string>();
        List<char> alfabeto = Enumerable.Range('a', 'z'-'a'+1).Select(c => (char)c).ToList();
        const int qtdCompartimento = 6;
        int compartimento = 0;
        int prateleira = 0;
        int cont = 1;
    
        while (prateleira <= tamanhoPrateleira)
        {
          while (compartimento < length)
          {
            while (cont <= qtdCompartimento)
            {
              codigos.Add(string.Format("{0}{1}/00{2}", alfabeto[compartimento].ToString().ToUpper(), prateleira + 1, cont));
              cont++;
            }
            compartimento++;
            cont = 1;
          }
          compartimento = 0;
          prateleira++;
        }
    
        return codigos;
      }
    


    Olavo Oliveira Neto
    Se for útil marque como resposta e faça um Developer feliz :)
    • Marked as answer by Sérgio Pitta Wednesday, November 10, 2010 12:48 PM
    Wednesday, November 10, 2010 11:46 AM
    Moderator
  • Acho que assim vc tem os seus numeros em ordem crescente em uma lista.

     for
     (int
     i = 0; i < length; i++)
    {
    numero = i;
    lista.add(numero);
    }

    Quem sabe um dia os DataSets se extinguirão?
    Wednesday, November 10, 2010 12:13 PM
  • Olavo,

    Obrigado pelo feed...

    Criei um projeto só para testar seu raciocínio e obtive este resultado: System.Collections.Generic.List`1[System.String]

        private void button1_Click(object sender, EventArgs e)
        {
          textBox1.Text = GeraSequencia(4, 6).ToString();
        }
    

    Vlw pela ajuda!...

    abs,

     


    Sérgio Pitta
    Wednesday, November 10, 2010 12:18 PM
  • Faça assim:

     private void button1_Click(object sender, EventArgs e)
      {
       textBox1.Text = GeraSequencia(4, 6).Aggregate((a,b)=>a+"; "+b);
      }
    
    


    Olavo Oliveira Neto
    Se for útil marque como resposta e faça um Developer feliz :)
    • Marked as answer by Sérgio Pitta Wednesday, November 10, 2010 12:47 PM
    Wednesday, November 10, 2010 12:28 PM
    Moderator
  • Rogério,

     

    O form se comporta da seguinte forma: Ao abrir o form a numeração entra automaticamente em um TextBox fornecido pelo método, esta numeração será a chave-secundária da tabela que já possui um campo de identificação primária AUTO_INCREMENTO, exemplo:

     

    | id | idLote | ...

    | 1  | 1952  | ...

    | 2  | 4031  | ...

    ...

     

    Preciso que se comporte dessa forma:

    | id |   idLote    | ...

    | 1  | A1/0001  | ...

    | 2  | A1/0002  | ...

     ...

    abs,

     

     


    Sérgio Pitta
    Wednesday, November 10, 2010 12:36 PM
  • André,

    Obrigado pela atenção!

    Então, dessa forma, como faria para retornar o último registro da tabela para incrementar?

    abs,

     


    Sérgio Pitta
    Wednesday, November 10, 2010 12:41 PM
  • Olavo,

    Fucionou perfeitamente!...

    Agora vou fazer alguns ajustes, obrigado!

    abraço,

     


    Sérgio Pitta
    Wednesday, November 10, 2010 12:47 PM