C # - Реализация Enum / Combobox - PullRequest
0 голосов
/ 19 мая 2019

У меня есть локальная база данных для системы / приложения, которое я делаю.В этой БД у меня есть «Книги и столбцы категорий» - CategoryID также входит в таблицу «Книги» в качестве внешнего ключа, и у меня есть 10 записей категорий для жанров книг, таких как «Комиксы» (ID: 1), «Поделки» (ID:2), «Образование» (ID: 3) и т. Д.

В настоящее время в приложении реализована функция «Добавить запись книги», поэтому при сохранении в мою БД добавляется новая запись книги сподробности, приведенные, однако, для CategoryID (в таблице Книги), я могу вводить только целые числа, которые я не хочу (как объяснено ниже)

(Кстати, извиняюсь, но я все еще новичок в коде)

Я видел некоторые учебники по Enums, но я не могу найти ничего о том, как комбинировать Enum с комбинированным списком.

Я хочу, чтобы комбинированный список показывал что-то вроде:

1 - комиксы, 2 - ремесла, 3 - образование и т. Д.

Вышеприведенный выпадающий список в выпадающем списке будет указывать (например) «1 - комиксы» для CategoryID: 1, «2 - Ремесла для CategoryID: 2 и т. Д.

Это то, что я могУ меня вне кнопки «Добавить новую запись»

public partial class AddBookRecordForm : Form
{
    public AddBookRecordForm()
    {
        InitializeComponent();
    }

    enum BookCategory
    {
        Comics = 1,
        Crafts = 2,
        Education = 3,
        History = 4,
        Entertainment = 5,
        Thriller = 6,
        Religion = 7,
        Romance = 8,
        Fantasy = 9,
        Sports = 10
    }

Не уверен, что делать дальше - я предполагаю, что следующую часть кода нужно будет реализовать в коде кнопки «Сохранить».

Для справки ниже приведено соединение с БД, которое я установил в методе «Кнопка сохранения».

 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, CategoryID, ClassificationID, BookAvailabilityQuantity, Price) values ('" + this.txtName.Text.Trim() + "','" + this.txtAuthor.Text.Trim() + "','" + this.txtCategory.Text.Trim() + "','" + this.txtClassification.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.txtCategory.ResetText();
            this.txtClassification.ResetText();
            this.txtAvailabilityQuantity.ResetText();
            this.txtPrice.ResetText();
        }
    }

1 Ответ

0 голосов
/ 19 мая 2019

Для простоты я бы предложил это как мое быстрое решение.

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    enum BookCategory
    {
        Comics = 1,
        Crafts = 2,
        Education = 3,
        History = 4,
        Entertainment = 5,
        Thriller = 6,
        Religion = 7,
        Romance = 8,
        Fantasy = 9,
        Sports = 10
    }              

    private void Form1_Load(object sender, EventArgs e)
    {
        var values = Enum.GetValues(typeof(BookCategory));

        var dataSource = new List<BookCategoryData>();

        foreach (var bookCatergory in values)
        {
            dataSource.Add(new BookCategoryData() { Id = (int)bookCatergory, Name = bookCatergory.ToString() });
        }

        comboBox1.ValueMember = "Id";
        comboBox1.DisplayMember = "Name";
        comboBox1.DataSource = dataSource;

    }

    private void ComboBox1_SelectedIndexChanged(object sender, EventArgs e)
    {

    }
}

public class BookCategoryData
{
    public int Id { get; set; }
    public string Name { get; set; }
}

Кроме того, как указано здесь для других участников, посмотрите SQL-инъекцию и используйте Sql Parameters , чтобы использовать составной текст. Ваш код будет выглядеть примерно так:

string query = "insert into Books (BookName, BookAuthor, CategoryID, ClassificationID, BookAvailabilityQuantity, Price) " +
"values (@BookName, @BookAuthor, @CategoryID, @ClassificationID, @BookAvailabilityQuantity, @Price)";

SqlCommand command = new SqlCommand(query, connection);
command.Parameters.Add("@BookName", this.txtName.Text.Trim());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...