none
Select Distinct no data table? RRS feed

  • Pergunta

  • Olá amigos developers, estou trabalhando em uma aplicação windows forms com c# e estou com o seguinte problema: tenho um combobox que é populado por um arquivo CSV atravéz de um datatable. Até ai td bem, o problema é que por haver valores repetidos no arquivo CSV, eu queria saber se tem possíbilidades de fazer um select distinct no datatable para jogar o resultado para a combo, poís não fica legal popular a combo com valores duplicados, de resto está sussa....... por enquanto

    se alguém puder me ajudar!!!

     
    quarta-feira, 3 de fevereiro de 2010 19:50

Respostas

Todas as Respostas

  • Prezado,

    Pra ajudar a gente a responder sua dúvida, poste pra gente o código onde você está populando o ComboBox pela DataTable...
    André Alves de Lima
    Visite o meu site: http://andrealveslima.spaces.live.com
    Me siga no Twitter: @andrealveslima
    quinta-feira, 4 de fevereiro de 2010 13:16
    Moderador
  • Olá, abaixo o codigo que popula a combo:


    StreamReader
    ler = new StreamReader(caminhoArquivo);

     

     

    while (ler.Peek() != -1) string[] vetor = linha.Split(';'); "Grupo"] = vetor[0];

    l[

    "Usuario"] = vetor[1];

    {

    linha = ler.ReadLine();

     

    l = dt.NewRow();

    l[

     

     

    cmbGrupo.Items.Add(vetor[0]);

    dt.Rows.Add(l);

    }


    eu estava vendo algo sobre a classe IEnumerable e fiz o seguinte teste

    IEnumerable<DataRow> distinct = dt.AsEnumerable().Distinct(DataRowComparer.Default);

     

     

    foreach (DataRow r in distinct) string>("Grupo"));

    {

    cmbGrupo.Items.Add(r.Field<

     

    }

    mesmo assim ainda retorna valores duplicados

    quinta-feira, 4 de fevereiro de 2010 13:27
  •  

    Ola abaixo é o codigo
    StreamReader
    ler = new StreamReader(caminhoArquivo);

     

    while (ler.Peek() != -1)

    {

    linha = ler.ReadLine();

     

    string[] vetor = linha.Split(';');

    l = dt.NewRow();

    l[

    "Grupo"] = vetor[0];

    l[

    "Usuario"] = vetor[1];

     

    cmbGrupo.Items.Add(vetor[0]);

    dt.Rows.Add(l);

    }

    quinta-feira, 4 de fevereiro de 2010 13:30
  • Ola Bernoulthy

    Segue o link com a sua duvida e solução


    Abraço

    Klayton Gomes MCP /MCTS/ MCPD Analist System / Software Developer
    quinta-feira, 4 de fevereiro de 2010 13:31
  • Vou verificar qual dos exemplos da certo!!!!!!!!!!

    quinta-feira, 4 de fevereiro de 2010 15:30
  • tentei os exemplos no linq mas continuam vindo duplicados, ou talvez eu não soube implementa-los bem!!!
    quinta-feira, 4 de fevereiro de 2010 15:38
  • Se derrepende usar um dataview, será possível fazer um distinct e não trazer os valores repetidos
    segunda-feira, 8 de fevereiro de 2010 20:13
  • Prezado,

    Aí vai um exemplinho... Espero que te ajude a entender como fazer:

    DataTable dt = new DataTable();
    
    dt.Columns.Add("GRUPO", Type.GetType("System.String"));
    dt.Columns.Add("USUARIO", Type.GetType("System.String"));
    
    dt.Rows.Add("A", "Andre");
    dt.Rows.Add("A", "Joao");
    dt.Rows.Add("B", "Andre");
    dt.Rows.Add("C", "Jose");
    
    comboBox2.ValueMember = "USUARIO";
    comboBox2.DisplayMember = "USUARIO";
    
    var distinctDt = (from DataRow u in dt.Rows
                      select u["USUARIO"]).Distinct();
    
    comboBox2.DataSource = distinctDt.ToList();
    

    André Alves de Lima
    Visite o meu site: http://andrealveslima.spaces.live.com
    Me siga no Twitter: @andrealveslima
    • Marcado como Resposta Bernoulthy terça-feira, 9 de fevereiro de 2010 15:12
    terça-feira, 9 de fevereiro de 2010 13:04
    Moderador
  • Muito obrigado andré, era justamente o que eu queria fazer!!!!

    terça-feira, 9 de fevereiro de 2010 15:14
  • Só mais uma dúvida, e como posso fazer para add mais valores nesta lista, pois após populada, tenho um campo texto onde informo o novo valor, e ao clicar no button, quero q esse valor seja add na list, sem repetição
    • Editado Bernoulthy terça-feira, 9 de fevereiro de 2010 19:45
    terça-feira, 9 de fevereiro de 2010 15:52
  • Prezado,

    Aí, na hora de adicionar, você precisa checar se o item já está ou não na lista... Seria algo como:

    List<object> listaAtual = (comboBox2.DataSource as List<object>);
    
    if (!listaAtual.Contains(textBox4.Text))
    {
        listaAtual.Add(textBox4.Text);
        comboBox2.DataSource = null;
        comboBox2.DataSource = listaAtual;
    }
    

    André Alves de Lima
    Visite o meu site: http://andrealveslima.spaces.live.com
    Me siga no Twitter: @andrealveslima
    • Marcado como Resposta Bernoulthy terça-feira, 9 de fevereiro de 2010 19:34
    terça-feira, 9 de fevereiro de 2010 16:13
    Moderador
  • Fiz um teste rapido antes de sair so serviço e vi que funcionou,valeu mesmo!!!!
    parabens pelo seu conhecimento!!!

    terça-feira, 9 de fevereiro de 2010 18:49