#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;
}
}