Как считывать данные из базы данных в текстовом поле при автоматическом выборе из другого текстового поля в c#

#c# #sql #sql-server

#c# #sql #sql-сервер

Вопрос:

Я работаю над POS-системой.Я выбираю описания продуктов из текстового поля, но как выбрать ту же цену продукта??

 public void autoFill(TextBox abc) {
            SqlCommand cmd = new SqlCommand("SELECT * FROM pProduct",cnn.con);
            SqlDataReader rd;      

            try
            {

                cnn.con.Open();
                rd = cmd.ExecuteReader();
                while (rd.Read()) {
                    abc.AutoCompleteCustomSource.Add(rd["Descreption"].ToString());
                }
                rd.Close();                
                cnn.con.Close();
            }
            catch (Exception ex) {
                MessageBox.Show(ex.ToString());
            }
        }
 

Комментарии:

1. Что вы подразумеваете под той же ценой продукта?

Ответ №1:

используйте другое TextBox по цене

 public void autoFill(TextBox abc, TextBox prc) {
            SqlCommand cmd = new SqlCommand("SELECT * FROM pProduct",cnn.con);
            SqlDataReader rd;      

            try
            {

                cnn.con.Open();
                rd = cmd.ExecuteReader();
                while (rd.Read()) {
                    abc.AutoCompleteCustomSource.Add(rd["Descreption"].ToString());
                    prc.AutoCompleteCustomSource.Add(rd["Price"].ToString());
                }
                rd.Close();                
                cnn.con.Close();
            }
            catch (Exception ex) {
                MessageBox.Show(ex.ToString());
            }
        }
 

Комментарии:

1. Отображается список цен, но как выбрать цену для выбранного описания?

2. итак, вы не хотите создавать другое текстовое поле выбора цены, но хотите выбрать цену для выбранного описания?

Ответ №2:

Добавьте поле в свой класс формы:

 Dictionary<string, decimal> products = new Dictionary<string, decimal>();
 

Конечно, вы должны использовать свои собственные типы вместо string and decimal .

Вставка данных в словарь при чтении из базы данных:

 using (var conn = new SqlConnection(connectionString))
{
    conn.Open();
    using (var cmd = new SqlCommand("SELECT * FROM pProduct", conn))
    using (var reader = cmd.ExecuteReader())
    {
        while (reader.Read())
        {
            string description = (string)reader["Description"];
            decimal price = (decimal)reader["Price"];

            products.Add(description, price);
            descriptionTextBox.AutoCompleteCustomSource.Add(description);
        }
    }
}
 

Обратите внимание на using инструкцию. Он закроет и утилизирует ресурсы даже в случае исключений.

Подпишитесь на TextChanged событие.

 private void DescriptionTextBox_TextChanged(object sender, EventArgs e)
{
    decimal price;
    if (products.TryGetValue(descriptionTextBox.Text, out price))
    {
        priceTextBox.Text = price.ToString();
    }
    else
    {
        priceTextBox.Text = string.Empty;
    }
}