How to select the contents of a column coming from a Dataset C#

Asked

Viewed 471 times

0

Is there a better way to search for the content of a specific column? I have information that repeats in a "template" column I want to retrieves this content only 1 time. I’m doing it like this, but maybe there’s a better way to do it.

        public DataSet get()
        {
            OleDbConnection conn = new OleDbConnection(Conexao.getConexao());
            conn.Open();
            OleDbDataAdapter da = new OleDbDataAdapter("Select Codigo as Codigo, Nome as Nome,modelo, Cargo as Cargo, Empresa as Empresa From funcionarios", conn);
            DataSet ds = new DataSet();
            da.Fill(ds);
            return ds;
        }

   private void exibirDados()
    {
        try
        {
            funcionarios funci = new funcionarios();
            DataSet ds = funci.get();
            dgvDados.DataSource = ds.Tables[0];
            string retorno = ConteudoColuna("modelo",ds);
        }
        catch
        {
            throw;
        }
    }

    private string ConteudoColuna(string nomeColuna, DataSet table)
    {
        DataTable recebeTable = table.Tables[0];

        foreach (DataColumn column in recebeTable.Columns)
        {

            if (column.ToString() == nomeColuna)
            {
                string teste2 = column.ToString();
                return column.ToString();
            }

        }
        return  "";
    }
  • @Rovannlinhalis, I made the adjustment of the question

  • @Rovannlinhalis, this is an example for study, I’m using . mdb

  • @Rovannlinhalis, this current code, brings me the name of the column, wanted to get the contents of a specific column

1 answer

1


There is a better way to search the contents of a specific column?

Yes, if you already have the name of the column, just do: row["modelo"].ToString(); or could do just ds.Tables[0].Rows[0]["modelo"].ToString(); which also works (as long as no collection is empty), but that’s the least of the problems...

The first step is to define what a Funcionario in a class "POCO":

public class Funcionario
{
    public int Id {get;set;}
    public string Nome {get;set;}
    public string Modelo {get;set;}
}

So you could do your Get, using the typed object:

public List<Funcionario> GetFuncionarios() //O Método retorna uma coleção de Funcionarios
{
    List<Funcionario> funcionarios = new List<Funcionario>();

    using (OleDbConnection conexao = new OleDbConnection("string conexao")) //utilizar uma conexão dentro de um bloco using, pra ser descartado após o bloco.
    {
        conexao.Open();

        using (OleDbCommand cmd = new OleDbCommand("select id, nome, modelo from funcionarios"))
        {
            using (OleDbDataReader dr = cmd.ExecuteReader()) //O Data reader, vai lendo linha a linha e preenchendo a coleção. Se usar um DataAdapter com fill, ele primeiro seleciona tudo, e depois preenche o DataSet de uma vez (mais lento)
            {
                while (dr.Read()) //Enquanto estiver lendo...
                {
                    //vai adicionando funcionários...
                    funcionarios.Add(new Funcionario() 
                    { 
                       Id = dr.GetInt32(0),
                       Nome = dr.GetString(1),
                       Modelo = dr.GetString(2)
                    });
                }

            }
        }
    }


    return funcionarios; //retorna a lista.

}

And then search/filter/display the data:

//Selecionando todos os funcionários
List<Funcionario> funcionarios = d.GetFuncionarios();


//Selecionando um funcionário
Funcionario f1 = funcionarios.Where(x => x.Id == 1).FirstOrDefault();


//Filtrando funcionários que começam com a letra A
List<Funcionario> filtrados = funcionarios.Where(x=> x.Nome.StartsWith("A")).ToList();


//Depois você pode usar essas lista como source do DataGridView:
//dataGridView1.DataSource = filtrados;

//Buscar apenas o Modelo do primeiro registro
string modelo = funcionarios.First().Modelo;

Although not running (no database), I put in Sqlfiddle

  • @itasouza, understood ? any questions ?

Browser other questions tagged

You are not signed in. Login or sign up in order to post.