Извлечение данных из базы данных в DataGridView C#

#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 рекомендует это сделать, потому что это означает, что вы можете изменить значение идентификатора таблицы, изменив поле со списком.. Это невозможно сделать с помощью запроса объединения; привязка данных, полученных из объединений, значительно усложняет работу