#c# #sql-server
#c# #sql-сервер
Вопрос:
В моей базе данных есть две таблицы Category
(Cat_id, Cat_name) и Products
. Cat_id
является внешним ключом в Products
таблице.
Когда я извлекаю сведения о продукте из Products
таблицы в DataGridView, я хочу показать значение Cat_id
столбца с его именем (по Cat_name
), а не с самим идентификатором.
Как мне это сделать? Пожалуйста, помогите мне. Ниже приведен пример кода.
private void searchIconPIctureBox_Click(object sender, EventArgs e)
{
string product_txt = searchTxt.Text;
if ((product_txt) != "")
{
try
{
conn.Open();
com.Connection = conn;
string search_Product = searchTxt.Text;
com.CommandText = "select Name, Type, Amount, Price, Cat_id from Product_records where Name = search_Product ";
SqlDataReader dtr = com.ExecuteReader();
DataTable dttable = new DataTable();
dttable.Load(dtr);
ProductGridView.DataSource = dttable;
conn.Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
}
Комментарии:
1. Посмотрите, что могут сделать для вас соединения SQL.
Ответ №1:
Ваш SQL-запрос должен использовать внутреннее соединение между таблицами продуктов и категорий.
select Name, Type, Amount, Price, c.Name
from Personal_records
inner join Category c on records.Cat_id = c.Cat_id
where Name = search_Product
Ответ №2:
Вы можете использовать DataGridViewComboBox, чтобы сделать это за вас
Я делаю это в этом видеоhttps://www.youtube.com/watch?v=zrtjZlTYLQA начиная с 3:50 и далее, но видео, ведущее к нему, показывает, как я добираюсь до ситуации, когда он будет работать с созданием набора данных и помещением его в форму
Вот краткое изложение текста, если вы читатель, а не наблюдатель. Возможно, вы уже сделали что-то из этого:
- Добавьте набор данных в свой проект
- Подключите набор данных к вашей БД (щелкните правой кнопкой мыши, добавьте tableadapter, завершите работу мастера, выполнив
SELECT * FROM products
, повторите для категорий) - Переключиться на конструктор форм
- Откройте окно источники данных из меню вид Другое подменю Windows
- Перетащите таблицу продуктов в форму
- Редактирование его столбцов
- Измените столбец категории из текстового поля в поле со списком
- Установите его источником данных таблицу категорий в наборе данных, установите displaymember на имя, а valuemember на идентификатор
- Запустите проект
Комментарии:
1. Я понятия не имею, почему это отклонено; это именно тот способ, которым Microsoft рекомендует это сделать, потому что это означает, что вы можете изменить значение идентификатора таблицы, изменив поле со списком.. Это невозможно сделать с помощью запроса объединения; привязка данных, полученных из объединений, значительно усложняет работу