Реализация Combobox (выпадающий) как часть новой записи БД - PullRequest
0 голосов
/ 20 мая 2019

У меня есть локальная БД, в которой уже есть записи. В настоящее время я работаю над библиотечным проектом, и в БД есть таблицы книг и категорий (категория также является FK в таблице книг).

В приложении Windows Forms я пытаюсь реализовать форму для вставки новой записи книги в таблицу книг с использованием поля со списком, когда дело доходит до выбора категории.

До сих пор я пробовал приведенный ниже код - Нажатие кнопки «Сохранить» генерирует детали в БД, которые приведены в форме, но значение Category всегда равно NULL (выпадающий список не работает).

Не могли бы вы помочь мне найти то, что мне не хватает в приведенной ниже реализации, пожалуйста? Приведенный ниже код является тестом, который я сделал только для одного идентификатора категории - геттеры и сеттеры уже реализованы.

РЕДАКТИРОВАТЬ для получения более подробной информации ниже - ОБРАТИТЕ ВНИМАНИЕ, я знаю о, и все еще должен использовать параметризованные запросы, и я рассмотрю его после того, как я решу эту проблему со списком.

 private void AddBookRecordForm_Load(object sender, EventArgs e)
    {
        var dataSource = new List<Category>();

        dataSource.Add(new Category() { CategoryID = '4', CategoryName = "History" });

        cbCategory.ValueMember = "CategoryID";
        cbCategory.DisplayMember = "CategoryName";
        cbCategory.DataSource = dataSource;
    }

EDIT:

 string ConnectionString = @"Data Source=.\SQLEXPRESS;AttachDbFilename= 
 C:\Program Files\Microsoft SQL Server\MSSQL14.SQLEXPRESS\MSSQL\DATA\Library 
 System Project.mdf ;Integrated Security=True;Connect Timeout=30";

string Query = "insert into Books (BookName, BookAuthor, BookAvailabilityQuantity, Price) values ('" + this.txtName.Text.Trim() 
    + "','" + this.txtAuthor.Text.Trim() 
    + "','" + this.txtAvailabilityQuantity.Text.Trim() 
    + "','" + this.txtPrice.Text.Trim() + "');";

SqlConnection DBCon = new SqlConnection(ConnectionString);
SqlCommand DBCommand = new SqlCommand(Query, DBCon);
SqlDataReader DBReader;

try
{
    DBCon.Open();
    DBReader = DBCommand.ExecuteReader();
    MessageBox.Show("New book record added to the system.", "Library System", MessageBoxButtons.OK);

    while (DBReader.Read())
    {

    }
}

catch (Exception ex)
{
    MessageBox.Show(ex.Message);
}

finally
{
    // *** If you're going to be opening a connection be sure to close it ***
    // *** Finally blocks work well for this ***
    DBCon.Close();

    this.txtName.ResetText();
    this.txtAuthor.ResetText();
    this.txtAvailabilityQuantity.ResetText();
    this.txtPrice.ResetText();
}

1 Ответ

1 голос
/ 20 мая 2019

Источник данных может предоставлять элементы в элементе управления, но выбор нового элемента не будет автоматически изменять значение данных таким же образом, как изменение значения в связанном текстовом поле. Вам нужно будет вручную получить выбранное значение и обновить соответствующее поле в записи обновления. См. этот пост.

String Query = "insert into Books (CategoryName, BookName, BookAuthor, BookAvailabilityQuantity, Price) values (
    "'" + cbCategory.Text
    + "','" + this.txtName.Text.Trim() 
    + "','" + this.txtAuthor.Text.Trim() 
    + "','" + this.txtAvailabilityQuantity.Text.Trim() 
    + "','" + this.txtPrice.Text.Trim() + "');";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...