none
Criar uma Datatable e Vincular textBox a uma combobox RRS feed

  • Pergunta

  • Bom dia!!

    Como faço para criar um datatable e vincular os dados de uma textbox à uma combobox? Por exemplo, criar uma tabela onde os valores da coluna "Estado" carrega a lista do combobox,  vejam a figura abaixo:

    Estado Área Fator 1 Fator 2
    MG 18 2,3 2,56
    SP 12 5,3 2,56

    Ao selecionar o Estado MG no combobox, automaticamente as textbox seguintes apareceriam o valor da "Área" "Fator1" e "Fator 2" (no caso seriam 3 textbox).

    Como crio esse datatable e jogo os valores para a combobox e consequentemente para as textbox?

    Grato


    • Editado Rimave quinta-feira, 14 de agosto de 2014 12:03
    quinta-feira, 14 de agosto de 2014 11:58

Respostas

  • Rimave,

    Existem diversas maneiras de se fazer o que você precisa. Fiz de um jeito que acredito ser de fácil compreensão para quem está começando. Boa Sorte!

    Seguem instruções:

    - Crie um novo Form

    - Inclua os componentes 1 ComboBox e 3 TextBox;

    - Na classe do Form, insira os seguintes códigos:

    -- Variável visível para todos os métodos do Form, objeto da classe DataTable, logo após o construtor da classe:

    public DataTable dt;

    -- Método para criar o DataTable:

    private void criarDatatable()
    {
        // Cria o DataTable com a tabela
        dt = new DataTable();
    
        // Cria as colunas 
        dt.Columns.Add(new DataColumn("id", typeof(Int32)));
        dt.Columns.Add(new DataColumn("estado", typeof(string)));
        dt.Columns.Add(new DataColumn("area", typeof(Int32)));
        dt.Columns.Add(new DataColumn("fator1", typeof(double)));
        dt.Columns.Add(new DataColumn("fator2", typeof(double)));
    
        // Define a primeira coluna como chave primária da tabela
        dt.PrimaryKey = new DataColumn[] { dt.Columns["id"] };
    }

    -- Método para inserir linhas no DataTable:

    private void inserirLinha(int pId, string pEstado, int pArea, double pFator1, double pFator2) { // Insere linhas com dados DataRow lin = dt.NewRow(); lin["id"] = pId; lin["estado"] = pEstado; lin["area"] = pArea; lin["fator1"] = pFator1; lin["fator2"] = pFator2;

    dt.Rows.Add(lin); }

    -- Método para atualizar os valores dos TextBox:

    private void atualizaTextBox()
    {
    	int lin = Convert.ToInt32(comboBox1.SelectedIndex);
    
    	textBox1.Text = dt.Rows[lin]["area"].ToString();
    	textBox2.Text = dt.Rows[lin]["fator1"].ToString();
    	textBox3.Text = dt.Rows[lin]["fator2"].ToString();
    }

    -- No evento LOAD do Form:

    private void Form1_Load(object sender, EventArgs e)
    {
    	try
    	{
    		// Cria o DataTable
    		criarDatatable();
    
    		// Insere linha com dados no DataTable
    		inserirLinha(1, "MG", 18, 2.3, 2.56);
    		inserirLinha(2, "SP", 12, 5.3, 2.56);
    		
    		// Configura o comboBox 
    		comboBox1.DataSource = dt;
    		comboBox1.DisplayMember = "estado";
    		comboBox1.ValueMember = "id";
    		comboBox1.SelectedIndex = 0;
    
    		// Preenche os textBox pela primeira vez
    		atualizaTextBox();
    
    	}
    	catch (Exception ex)
    	{
    		MessageBox.Show(ex.Message);
    	}
    }

    -- No evento SelectionChangeCommitted do comboBox:

    private void comboBox1_SelectionChangeCommitted(object sender, EventArgs e)
    {
        atualizaTextBox();
    }

    Pode não ser a melhor forma de se fazer, mas funciona!




    • Editado Viniciusalopes quinta-feira, 21 de agosto de 2014 08:41 Identação do Código
    • Sugerido como Resposta Viniciusalopes quinta-feira, 21 de agosto de 2014 08:43
    • Marcado como Resposta Rimave terça-feira, 2 de setembro de 2014 12:16
    quinta-feira, 21 de agosto de 2014 08:35

Todas as Respostas

  • Cria um metodo ler, e coloca no Change do ComboBox que qndo vc escolher um estado ele deve fazer a pesquisa e depois preencher os textbox.


    "A mente que se abre para uma nova idéia, jamais voltará a seu tamanho original".

    quinta-feira, 14 de agosto de 2014 12:47
  • Douglas,

    Perdão,sou iniciante no assunto, como faço isso?

    Grato
    quinta-feira, 14 de agosto de 2014 13:18
  • Rimave,

    Existem diversas maneiras de se fazer o que você precisa. Fiz de um jeito que acredito ser de fácil compreensão para quem está começando. Boa Sorte!

    Seguem instruções:

    - Crie um novo Form

    - Inclua os componentes 1 ComboBox e 3 TextBox;

    - Na classe do Form, insira os seguintes códigos:

    -- Variável visível para todos os métodos do Form, objeto da classe DataTable, logo após o construtor da classe:

    public DataTable dt;

    -- Método para criar o DataTable:

    private void criarDatatable()
    {
        // Cria o DataTable com a tabela
        dt = new DataTable();
    
        // Cria as colunas 
        dt.Columns.Add(new DataColumn("id", typeof(Int32)));
        dt.Columns.Add(new DataColumn("estado", typeof(string)));
        dt.Columns.Add(new DataColumn("area", typeof(Int32)));
        dt.Columns.Add(new DataColumn("fator1", typeof(double)));
        dt.Columns.Add(new DataColumn("fator2", typeof(double)));
    
        // Define a primeira coluna como chave primária da tabela
        dt.PrimaryKey = new DataColumn[] { dt.Columns["id"] };
    }

    -- Método para inserir linhas no DataTable:

    private void inserirLinha(int pId, string pEstado, int pArea, double pFator1, double pFator2) { // Insere linhas com dados DataRow lin = dt.NewRow(); lin["id"] = pId; lin["estado"] = pEstado; lin["area"] = pArea; lin["fator1"] = pFator1; lin["fator2"] = pFator2;

    dt.Rows.Add(lin); }

    -- Método para atualizar os valores dos TextBox:

    private void atualizaTextBox()
    {
    	int lin = Convert.ToInt32(comboBox1.SelectedIndex);
    
    	textBox1.Text = dt.Rows[lin]["area"].ToString();
    	textBox2.Text = dt.Rows[lin]["fator1"].ToString();
    	textBox3.Text = dt.Rows[lin]["fator2"].ToString();
    }

    -- No evento LOAD do Form:

    private void Form1_Load(object sender, EventArgs e)
    {
    	try
    	{
    		// Cria o DataTable
    		criarDatatable();
    
    		// Insere linha com dados no DataTable
    		inserirLinha(1, "MG", 18, 2.3, 2.56);
    		inserirLinha(2, "SP", 12, 5.3, 2.56);
    		
    		// Configura o comboBox 
    		comboBox1.DataSource = dt;
    		comboBox1.DisplayMember = "estado";
    		comboBox1.ValueMember = "id";
    		comboBox1.SelectedIndex = 0;
    
    		// Preenche os textBox pela primeira vez
    		atualizaTextBox();
    
    	}
    	catch (Exception ex)
    	{
    		MessageBox.Show(ex.Message);
    	}
    }

    -- No evento SelectionChangeCommitted do comboBox:

    private void comboBox1_SelectionChangeCommitted(object sender, EventArgs e)
    {
        atualizaTextBox();
    }

    Pode não ser a melhor forma de se fazer, mas funciona!




    • Editado Viniciusalopes quinta-feira, 21 de agosto de 2014 08:41 Identação do Código
    • Sugerido como Resposta Viniciusalopes quinta-feira, 21 de agosto de 2014 08:43
    • Marcado como Resposta Rimave terça-feira, 2 de setembro de 2014 12:16
    quinta-feira, 21 de agosto de 2014 08:35
  • Viniciusalopes,

     Perfeito!! Valeu

    terça-feira, 2 de setembro de 2014 12:16