Не удается загрузить данные в ComboBox C# - PullRequest
0 голосов
/ 13 января 2020

Я вставил данные в ComboBox, используя следующий код в FormLoad Block

try
{
    using (SqlConnection con = new SqlConnection(conString))
    {
        SelectCategoryComboBox.Items.Clear();
        string query = "SELECT CategoryName FROM CategoryTable";
        con.Open();
        SqlDataReader sdr = new SqlCommand(query, con).ExecuteReader();
        while (sdr.Read())
        {
            SelectCategoryComboBox.Items.Add(sdr.GetValue(0).ToString());
        }

    }
}
catch
{
    StatusLabel.Text = "An error occured while loading Data";
}
finally
{
    SelectCategoryComboBox.SelectedItem = null;
    SelectCategoryComboBox.SelectedText = "Choose Category";
}

, он выполняет задание. в форме Вы можете создать категорию и удалить ее, выбрав Имя категории из ComboBox Вот скриншот формы . Я использовал следующий код для удаления и загрузки элементов в ComboBox после удаления.

try
{
    String conString = ConfigurationManager.ConnectionStrings["mfcdb"].ConnectionString;
    String query = "DELETE FROM CategoryTable WHERE CategoryName='" + SelectCategoryComboBox.SelectedItem.ToString() + "'";
    using (SqlConnection con = new SqlConnection(conString))
    {
        SqlCommand cmd = new SqlCommand(query, con);
        con.Open();
        cmd.ExecuteNonQuery();
    }
    StatusLabel.Text = "You have successfully deleted " + SelectCategoryComboBox.SelectedItem.ToString() + " Category";
}
catch
{
    StatusLabel.Text = "An Error occured while deleting " + SelectCategoryComboBox.SelectedItem.ToString() + " Category";
}
finally
{
    try
    {
        SelectCategoryComboBox.Items.Clear();
        String conString = ConfigurationManager.ConnectionStrings["mfcdb"].ConnectionString;
        using (SqlConnection con = new SqlConnection(conString))
        {


            string query = "SELECT CategoryName FROM CategoryTable";
            con.Open();
            SqlDataReader sdr = new SqlCommand(query, con).ExecuteReader();
            while (sdr.Read())
            {
                SelectCategoryComboBox.Items.Add(sdr.GetValue(0).ToString());
            }

        }
    }
    catch
    {
        StatusLabel.Text = "An error occured while loading Data";
    }
    finally
    {
        SelectCategoryComboBox.SelectedItem = null;
        SelectCategoryComboBox.SelectedText = "Choose Category";
    }

код для создания нового элемента. Ниже приведен

 if (CategoryNameText.Text == "")
            {
                StatusLabel.Text = "You have to provide a name to create a category";
            }
            else
            {
                String conString = ConfigurationManager.ConnectionStrings["mfcdb"].ConnectionString;
                String query = "INSERT INTO CategoryTable(CategoryName) VALUES('" + CategoryNameText.Text + "')";
                try
                {
                    using (SqlConnection con = new SqlConnection(conString))
                    {
                        con.Open();
                        SqlCommand cmd = new SqlCommand(query, con);
                        cmd.ExecuteNonQuery();
                    }
                    StatusLabel.Text = "You have successfully created " + CategoryNameText.Text + " Category";

                    try
                    {
                        using (SqlConnection scon = new SqlConnection(conString))
                        {
                            string locQuery = "SELECT CategoryName,Categoryid FROM CategoryTable";
                            SqlDataAdapter da = new SqlDataAdapter(locQuery, scon);
                            scon.Open();
                            DataSet ds = new DataSet();
                            da.Fill(ds, "CategoryTable");
                            SelectCategoryComboBox.ValueMember = "Categoryid";
                            SelectCategoryComboBox.DisplayMember = "CategoryName";
                            SelectCategoryComboBox.DataSource = ds.Tables["CategoryTable"];
                        }
                    }
                    catch
                    {
                        Thread.Sleep(3000);
                        StatusLabel.Text = "An Error Occured while Loading Data!";
                    }
                    finally
                    {
                        SelectCategoryComboBox.SelectedItem = null;
                        SelectCategoryComboBox.SelectedText = "Choose Category";
                    }
                    CategoryNameText.Focus();
                }
                catch
                {
                    Thread.Sleep(3000);
                    StatusLabel.Text = ("An ERROR occured While creating category!");
                }
                finally
                {
                    CategoryNameText.Text = "Enter Category Name";
                }

            }
        }

Этот код удаляет элементы совершенно. Но если я удалить элемент, который уже находится в ComboBox, он выполняет задание, т. е. удаляет и загружает оставшиеся элементы в ComboBox. но, если я создал элемент и удалил его перед закрытием формы, он удаляет элемент. Но не удается загрузить оставшиеся items.it показывает все элементы, которые уже существуют в ComboBox перед удалением. Было бы очень полезно, если бы вы могли помочь мне решить эту проблему. Здесь SelectCategoryComboBox - это имя ComboBox.

Ответы [ 2 ]

0 голосов
/ 13 января 2020

Я нашел то, что пошло не так ... Изменить следующий код

using (SqlConnection scon = new SqlConnection(conString))
                        {
                            string locQuery = "SELECT CategoryName,Categoryid FROM CategoryTable";
                            SqlDataAdapter da = new SqlDataAdapter(locQuery, scon);
                            scon.Open();
                            DataSet ds = new DataSet();
                            da.Fill(ds, "CategoryTable");
                            SelectCategoryComboBox.ValueMember = "Categoryid";
                            SelectCategoryComboBox.DisplayMember = "CategoryName";
                            SelectCategoryComboBox.DataSource = ds.Tables["CategoryTable"];
                        } 

На

using (SqlConnection con = new SqlConnection(conString))
                        {
                            SelectCategoryComboBox.Items.Clear();
                            string squery = "SELECT CategoryName FROM CategoryTable";
                            con.Open();
                            SqlDataReader sdr = new SqlCommand(squery, con).ExecuteReader();
                            while (sdr.Read())
                            {
                                SelectCategoryComboBox.Items.Add(sdr.GetValue(0).ToString());
                            }

                        }

это сработало для меня.

0 голосов
/ 13 января 2020

Я обнаружил, что проблема возникает в следующем предложении.

String query = "INSERT INTO CategoryTable(CategoryName) VALUES('" + CategoryNameText.Text + "')";

У меня есть два решения.

Во-первых, пожалуйста, установите Разрешить пустые значения для другого поля. Например: enter image description here

Во-вторых, вы можете использовать следующий код для замены исходного кода.

string query = string.Format("INSERT INTO Student(CategoryName, CategoryId, Age) VALUES('{0}','{1}','{2}')",textBox1.Text,textBox2.Text,textBox3.Text);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...