el_tot93 Ответов: 1

Combobox с кодом C# (правильный способ )


я использую этот код, и он хорошо работает со мной, но то, что я прошу, - это хороший способ его кодирования ( я использую его, чтобы получить данные из таблицы, чтобы связать их с другим combobox, чтобы заставить их работать вместе).

Что я уже пробовал:

первый combobox

public Needform()
    {
        string mainconn = ConfigurationManager.ConnectionStrings["MY"].ConnectionString;
        SqlConnection sqlconn = new SqlConnection(mainconn);
        string sqlquery = "select * from [dbo].[Governorate]";
        SqlCommand sqlcomm = new SqlCommand(sqlquery, sqlconn);
        sqlconn.Open();
        SqlDataAdapter sda = new SqlDataAdapter(sqlcomm);
        DataTable dt = new DataTable();
        sda.Fill(dt);
        comboBoxGovernorate.ValueMember = "id_Governorate";
        comboBoxGovernorate.DisplayMember = "name";
        comboBoxGovernorate.DataSource = dt;
        comboBoxCity.Enabled = false;
  }



тот, другой

private void ComboBoxGovernorate_SelectedIndexChanged(object sender, EventArgs e)
    {
        if (comboBoxGovernorate.SelectedValue.ToString() != null)
        {
            string mainconn = ConfigurationManager.ConnectionStrings["MY"].ConnectionString;
            SqlConnection sqlconn = new SqlConnection(mainconn);
            string sqlquery = "select * from [dbo].[City]where id_Governorate=@id_Governorate";
            SqlCommand sqlcomm = new SqlCommand(sqlquery, sqlconn);
            sqlconn.Open();
            sqlcomm.Parameters.AddWithValue("@id_Governorate", comboBoxGovernorate.SelectedValue.ToString());
            SqlDataAdapter sda = new SqlDataAdapter(sqlcomm);
            DataTable dt = new DataTable();
            sda.Fill(dt);
            comboBoxCity.ValueMember = "id";
            comboBoxCity.DisplayMember = "city";
            comboBoxCity.DataSource = dt;
            comboBoxCity.Enabled = true;
        }
    }


thx и я надеюсь, что все извлекут из этого урок

1 Ответов

Рейтинг:
4

OriginalGriff

Все в порядке, это работает. Но ... соединения и команды-это скудные ресурсы, и их следует утилизировать, когда вы закончите с ними. Самый простой способ-это использовать using блок:

public void Needform()
    {
    string mainconn = ConfigurationManager.ConnectionStrings["MY"].ConnectionString;
    using (SqlConnection sqlconn = new SqlConnection(mainconn))
        {
        sqlconn.Open();
        string sqlquery = "SELECT * FROM [dbo].[Governorate]";
        using (SqlCommand sqlcomm = new SqlCommand(sqlquery, sqlconn))
            {
            using (SqlDataAdapter sda = new SqlDataAdapter(sqlcomm))
                {
                DataTable dt = new DataTable();
                sda.Fill(dt);
                comboBoxGovernorate.ValueMember = "id_Governorate";
                comboBoxGovernorate.DisplayMember = "name";
                comboBoxGovernorate.DataSource = dt;
                comboBoxCity.Enabled = false;
                }
            }
        }
    }

private void ComboBoxGovernorate_SelectedIndexChanged(object sender, EventArgs e)
    {
    if (comboBoxGovernorate.SelectedValue.ToString() != null)
        {
        string mainconn = ConfigurationManager.ConnectionStrings["MY"].ConnectionString;
        using (SqlConnection sqlconn = new SqlConnection(mainconn))
            {
            sqlconn.Open();
            string sqlquery = "SELECT * FROM [dbo].[City] WHERE id_Governorate=@id_Governorate";
            using (SqlCommand sqlcomm = new SqlCommand(sqlquery, sqlconn))
                {
                sqlcomm.Parameters.AddWithValue("@id_Governorate", comboBoxGovernorate.SelectedValue.ToString());
                using (SqlDataAdapter sda = new SqlDataAdapter(sqlcomm))
                    {
                    DataTable dt = new DataTable();
                    sda.Fill(dt);
                    comboBoxCity.ValueMember = "id";
                    comboBoxCity.DisplayMember = "city";
                    comboBoxCity.DataSource = dt;
                    comboBoxCity.Enabled = true;
                    }
                }
            }
        }
    }
Есть еще два изменения, которые я бы рекомендовал:
1) просто "стиль", но используйте верхний регистр для ключевых слов SQL - это облегчает "поиск" их в команде.
2) вообще не делайте "SELECT * FROM" - всегда называйте столбцы, которые вам нужно извлечь. Таким образом, вы не тратите впустую пропускную способность, извлекая данные, которые вы не собираетесь использовать (и если вы добавляете изображения, например, которые могут быть значительными), и это помогает "защитить" вас от изменений макета БД, поскольку вы контролируете порядок, в котором они возвращаются. Например, с таблицами это может иметь большое значение для вашего приложения, когда вы будете обновлять вещи позже.


el_tot93

спасибо тебе братан за твою помощь и еще раз спасибо за твое время

OriginalGriff

Всегда пожалуйста!