Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Como filtrar e sugerir automaticamente itens do combo Box com base no texto inserido e conectar ao banco de dados local

Boa noite. Preenchi meu Combo Box com uma lista de clientes que vem do meu banco de dados e gostaria que quando o usuário começasse a digitar o nome do cliente o combo Box sugerisse o nome dos clientes.

E também gostaria de saber como conectar um banco de dados local (no caso MySQL Workbench) porque estou conseguindo configurar. Segue abaixo o modelo de configuração que estou tentando fazer.

Obrigado

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

1 resposta
solução!

Bom dia Pierre, tudo bom?

Com relação a conexão com o MySQL para criar a string de conexão sugiro você dar uma olhada no site ConnectionString, ai é só olhar a melhor opção para o banco que você estará utilizando, abaixo um exemplo:

using MySql.Data.MySqlClient;

namespace ControleDeSeriesFilmes.DAO
{

    sealed class ConnectionDAO
    {

        private static MySqlConnection conn = null; 

        public static MySqlConnection getConnection() {
            if (conn == null)
            {
                conn = new MySqlConnection("Server=localhost;Database=filmesseries;Uid=root;Pwd=root");
            }
            return conn;
        }
    }
}

Com relação a implementação do auto completar você dar uma olhada nas sugestões deste tópico. Com base nesse tópico fiz uma sugestão: No evento do ComboBox TextChanged

HandleTextChanged(comboBox1.Text);

Neste Evento por sua vez, vou adicionando o retorno de uma consulta:

private void HandleTextChanged(string busca)
        {
            var txt = comboBox1.Text;
            var list = GetNomes(busca);// Consulta os nomes
            if (list.Count() > 0)
            {
                comboBox1.DataSource = list.ToList();
                comboBox1.SelectedIndex = 0;
                var sText = comboBox1.Items[0].ToString();
                comboBox1.SelectionStart = txt.Length;
                comboBox1.SelectionLength = sText.Length - txt.Length;
                comboBox1.DroppedDown = true;
                return;
            }
            else
            {
                comboBox1.DroppedDown = false;
                comboBox1.SelectionStart = txt.Length;
            }
        }

O método que retorna a lista de nomes:

private List<string> GetNomes(string busca)
        {
            List<string> lista = new List<string>();
            using (var conn = MyConnection.getConnection())
            {

                try
                {
                    conn.Open();

                    var comandoSQL = new StringBuilder();
                    comandoSQL.Append("SELECT nome FROM cliente WHERE nome LIKE @busca ");// consulta com Like
                    MySqlCommand comando = new MySqlCommand(comandoSQL.ToString(), conn);
                    comando.Parameters.AddWithValue("@busca","%"+busca+"%");
                    MySqlDataReader reader = comando.ExecuteReader();
                    if (reader.HasRows == false)
                    {
                        lista = null;
                    }
                    else
                    {
                        while (reader.Read())
                        {

                            lista.Add(reader["nome"].ToString());
                        }
                    }
                }
                catch (Exception ex)
                {

                    MessageBox.Show("Mensagem: " + ex.Message);
                }

            }

            return lista;
        }

Nesse exemplo as "sugestões" estão vindas do banco e é somente um código para ajudar a pensar em uma solução, pq o mesmo o código está meio macarrônico, sem padrão e boas práticas, mas espero que possa se de alguma ajuda.

Insira aqui a descrição dessa imagem para ajudar na acessibilidade