ComboBox leaving form slow while loading data winforms C # visual studio

1

Good evening, I have a question. I have a client list that lists the cities in a combobox, but every time I open the registry it loads the data and this slows down the loading of the form, has some way of doing the query only the first time it opens the form then reuse?

This is the Code that populates the checkBox

       String nomeConexao = LoginInfo.StringConexao;
       String string_conn = 
       ConfigurationManager.ConnectionStrings[nomeConexao].ConnectionString;
        SqlConnection conn = new SqlConnection(string_conn);
        try
        {
            conn.Open();
        }
        catch (SqlException sqle)
        {
            MessageBox.Show("Falha ao efetuar a conexão. Erro: " + sqle);
        }
        String CodCidadeEmpresa = DadosEmpresa.CodCidade;

        String sql = "SELECT COD, CIDADE FROM CODMUNICIPIO ORDER BY CIDADE";
        SqlDataAdapter da = new SqlDataAdapter(sql, conn);
        DataTable dtResultado = new DataTable();
        dtResultado.Clear();
        CbCidade.DataSource = null;
        da.Fill(dtResultado);
        CbCidade.DataSource = dtResultado;
        CbCidade.ValueMember = "COD";
        CbCidade.DisplayMember = "CIDADE";
        CbCidade.SelectedItem = "";
        CbCidade.SelectedValue = CodCidadeEmpresa;
        CbCidade.Refresh();
        conn.Close();
    
asked by anonymous 05.06.2018 / 00:14

2 answers

1

Another option would be to load the DropDown asynchronously, so it would not crash the form while it is loaded:

Create an asynchronous method as follows:

private async void CarregaDropDownCidades()
{
    String nomeConexao = LoginInfo.StringConexao;
    tring string_conn = 
    onfigurationManager.ConnectionStrings[nomeConexao].ConnectionString;
    SqlConnection conn = new SqlConnection(string_conn);
    try
    {
        conn.Open();
    }
    catch (SqlException sqle)
    {
        MessageBox.Show("Falha ao efetuar a conexão. Erro: " + sqle);
    }
    String CodCidadeEmpresa = DadosEmpresa.CodCidade;

    String sql = "SELECT COD, CIDADE FROM CODMUNICIPIO ORDER BY CIDADE";
    SqlDataAdapter da = new SqlDataAdapter(sql, conn);
    DataTable dtResultado = new DataTable();
    dtResultado.Clear();    
    da.Fill(dtResultado);

    Invoke((MethodInvoker)delegate
    {
        CbCidade.DataSource = null;
        CbCidade.DataSource = dtResultado;
        CbCidade.ValueMember = "COD";
        CbCidade.DisplayMember = "CIDADE";
        CbCidade.SelectedItem = "";
        CbCidade.SelectedValue = CodCidadeEmpresa;
        CbCidade.Refresh();
    }); 
    conn.Close();
}

In load of your form, make the following call:

private async void Form1_Load(object sender, EventArgs e)
{
    await Task.Run(() =>
    {
        CarregaDropDownCidades();
    });
}
    
05.06.2018 / 15:41
0

Try removing ORDER BY CIDADE from your select and sorting it directly in the CbCidade.Sorted = true; combo.

If the above tip does not resolve, then try the second method

Create a cities class

public class Cidades
{
  public int id {get; set;}
  public string nome {get; set;}
}

Then in the main form create a public list

public List<Cidades> ComboCidades {get; set;}

And then at the boot of your system you load it with select data

Then when you open your form that has the combo of cities you fill it with the list items +/- so

CbCidade.DataSource = ComboCidades;
CbCidade.DisplayMember = "nome";
CbCidade.ValueMember = "id";
    
05.06.2018 / 13:30