Created a form to manage categories and sub-categories along with their properties.
This commit is contained in:
@@ -0,0 +1,269 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Data;
|
||||
using System.Data.SqlClient;
|
||||
using System.Drawing;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Forms;
|
||||
|
||||
namespace InventoryTest
|
||||
{
|
||||
public partial class CategoryManager : Form
|
||||
{
|
||||
private static string ConnectionString { get; set; }
|
||||
private static Dictionary<string, int> CategoryIds { get; } = new();
|
||||
private static Dictionary<string, int> SubCategoryIds { get; } = new();
|
||||
|
||||
public CategoryManager(string connectionString)
|
||||
{
|
||||
ConnectionString = connectionString;
|
||||
|
||||
InitializeComponent();
|
||||
|
||||
CategoryComboBoxManager.SelectedIndexChanged += CategoryComboBoxManager_SelectedIndexChanged;
|
||||
SubCategoryComboBoxManager.SelectedIndexChanged += SubCategoryComboBoxManager_SelectedIndexChanged;
|
||||
CategoryPropertyNameTextBox.TextChanged += CategoryPropertyNameTextBox_TextChanged;
|
||||
SubCategoryPropertyNameTextBox.TextChanged += SubCategoryNameTextBox_TextChanged;
|
||||
NewCategoryNameTextBox.TextChanged += NewCategoryNameTextBox_TextChanged;
|
||||
|
||||
LoadCategories();
|
||||
}
|
||||
|
||||
private void NewCategoryNameTextBox_TextChanged(object sender, EventArgs e)
|
||||
{
|
||||
CreateNewCategoryButton.Enabled = !string.IsNullOrEmpty(NewCategoryNameTextBox.Text);
|
||||
CreateNewSubCategoryButton.Enabled = !string.IsNullOrEmpty(NewCategoryNameTextBox.Text);
|
||||
}
|
||||
|
||||
private void SubCategoryNameTextBox_TextChanged(object sender, EventArgs e)
|
||||
{
|
||||
CreateSubCategoryButton.Enabled = !string.IsNullOrEmpty(SubCategoryPropertyNameTextBox.Text);
|
||||
}
|
||||
|
||||
private void CategoryPropertyNameTextBox_TextChanged(object sender, EventArgs e)
|
||||
{
|
||||
CreateCategoryPropertyButton.Enabled = !string.IsNullOrEmpty(CategoryPropertyNameTextBox.Text);
|
||||
}
|
||||
|
||||
private void SubCategoryComboBoxManager_SelectedIndexChanged(object sender, EventArgs e)
|
||||
{
|
||||
LoadSubCategoryProperties();
|
||||
}
|
||||
|
||||
private void CategoryComboBoxManager_SelectedIndexChanged(object sender, EventArgs e)
|
||||
{
|
||||
SubCategoryComboBoxManager.Items.Clear();
|
||||
CategoryPropertiesListBox.Items.Clear();
|
||||
SubCategoryPropertiesListBox.Items.Clear();
|
||||
var id = CategoryIds[CategoryComboBoxManager.Text];
|
||||
SubCategoryIds.Clear();
|
||||
|
||||
using var connection = new SqlConnection(ConnectionString);
|
||||
using var command = new SqlCommand("SELECT * FROM dbo.GetCategorySubCategories(@ID)", connection);
|
||||
command.Parameters.AddWithValue("ID", id);
|
||||
|
||||
connection.Open();
|
||||
|
||||
var reader = command.ExecuteReader();
|
||||
|
||||
while (reader.Read())
|
||||
{
|
||||
SubCategoryComboBoxManager.Items.Add(reader["Name"]);
|
||||
SubCategoryIds.Add(reader["Name"].ToString(), Convert.ToInt32(reader["ID"]));
|
||||
}
|
||||
|
||||
reader.Close();
|
||||
|
||||
if (SubCategoryComboBoxManager.Items.Count > 0)
|
||||
{
|
||||
SubCategoryComboBoxManager.Enabled = true;
|
||||
SubCategoryComboBoxManager.SelectedIndex = 0;
|
||||
ToggleSubCategoryProperty(true);
|
||||
}
|
||||
else
|
||||
{
|
||||
ToggleSubCategoryProperty(false);
|
||||
SubCategoryComboBoxManager.Enabled = false;
|
||||
}
|
||||
|
||||
LoadCategoryProperties();
|
||||
}
|
||||
|
||||
private void LoadCategories()
|
||||
{
|
||||
CategoryComboBoxManager.Items.Clear();
|
||||
SubCategoryComboBoxManager.Items.Clear();
|
||||
CategoryIds.Clear();
|
||||
|
||||
using var connection = new SqlConnection(ConnectionString);
|
||||
using var command = new SqlCommand("SELECT [Category ID], [Category Name] FROM Category", connection);
|
||||
|
||||
connection.Open();
|
||||
|
||||
var reader = command.ExecuteReader();
|
||||
|
||||
while (reader.Read())
|
||||
{
|
||||
CategoryIds.Add(reader["Category Name"].ToString(), Convert.ToInt32(reader["Category ID"]));
|
||||
CategoryComboBoxManager.Items.Add(reader["Category Name"]);
|
||||
}
|
||||
|
||||
reader.Close();
|
||||
|
||||
if (CategoryComboBoxManager.Items.Count > 0)
|
||||
{
|
||||
ToggleCategoryProperty(true);
|
||||
CategoryComboBoxManager.SelectedIndex = 0;
|
||||
}
|
||||
else ToggleCategoryProperty(false);
|
||||
}
|
||||
|
||||
private void LoadCategoryProperties()
|
||||
{
|
||||
CategoryPropertiesListBox.Items.Clear();
|
||||
|
||||
using var connection = new SqlConnection(ConnectionString);
|
||||
using var command = new SqlCommand("SELECT * FROM GetCategoryProperties(@CategoryID)", connection);
|
||||
command.Parameters.AddWithValue("CategoryID", CategoryIds[CategoryComboBoxManager.Text]);
|
||||
|
||||
connection.Open();
|
||||
|
||||
var reader = command.ExecuteReader();
|
||||
|
||||
while (reader.Read())
|
||||
CategoryPropertiesListBox.Items.Add(reader["Name"]);
|
||||
}
|
||||
|
||||
private void LoadSubCategoryProperties()
|
||||
{
|
||||
SubCategoryPropertiesListBox.Items.Clear();
|
||||
using var connection = new SqlConnection(ConnectionString);
|
||||
using var command = new SqlCommand("SELECT * FROM GetSubCategoryProperties(@ID)", connection);
|
||||
command.Parameters.AddWithValue("ID", SubCategoryIds[SubCategoryComboBoxManager.Text]);
|
||||
|
||||
connection.Open();
|
||||
|
||||
var reader = command.ExecuteReader();
|
||||
|
||||
while (reader.Read())
|
||||
SubCategoryPropertiesListBox.Items.Add(reader["Name"]);
|
||||
}
|
||||
|
||||
private void ToggleSubCategoryProperty(bool enabled)
|
||||
{
|
||||
SubCategoryPropertyNameTextBox.Enabled = enabled;
|
||||
CreateSubCategoryButton.Enabled = enabled;
|
||||
DeleteSubCategoryButton.Enabled = enabled;
|
||||
}
|
||||
|
||||
private void ToggleCategoryProperty(bool enabled)
|
||||
{
|
||||
CategoryPropertyNameTextBox.Enabled = enabled;
|
||||
CreateCategoryPropertyButton.Enabled = enabled;
|
||||
DeleteCategoryButton.Enabled = enabled;
|
||||
}
|
||||
|
||||
private void CreateCategoryPropertyButton_Click(object sender, EventArgs e)
|
||||
{
|
||||
using var connection = new SqlConnection(ConnectionString);
|
||||
using var command = new SqlCommand("CreateCategoryPropertyByName", connection) { CommandType = CommandType.StoredProcedure };
|
||||
command.Parameters.AddWithValue("PropertyName", CategoryPropertyNameTextBox.Text);
|
||||
command.Parameters.AddWithValue("CategoryID", CategoryIds[CategoryComboBoxManager.Text]);
|
||||
|
||||
connection.Open();
|
||||
|
||||
command.ExecuteNonQuery();
|
||||
|
||||
LoadCategoryProperties();
|
||||
|
||||
CategoryPropertyNameTextBox.Text = string.Empty;
|
||||
CategoryPropertyNameTextBox.Focus();
|
||||
}
|
||||
|
||||
private void CreateSubCategoryButton_Click(object sender, EventArgs e)
|
||||
{
|
||||
using var connection = new SqlConnection(ConnectionString);
|
||||
using var command = new SqlCommand("CreateSubCategoryPropertyByName", connection) { CommandType = CommandType.StoredProcedure };
|
||||
command.Parameters.AddWithValue("PropertyName", SubCategoryPropertyNameTextBox.Text);
|
||||
command.Parameters.AddWithValue("SubCategoryID", SubCategoryIds[SubCategoryComboBoxManager.Text]);
|
||||
|
||||
connection.Open();
|
||||
|
||||
command.ExecuteNonQuery();
|
||||
|
||||
LoadSubCategoryProperties();
|
||||
|
||||
SubCategoryPropertyNameTextBox.Text = string.Empty;
|
||||
SubCategoryPropertyNameTextBox.Focus();
|
||||
}
|
||||
|
||||
private void CreateNewCategoryButton_Click(object sender, EventArgs e)
|
||||
{
|
||||
using var connection = new SqlConnection(ConnectionString);
|
||||
using var command = new SqlCommand("CreateCategory", connection) { CommandType = CommandType.StoredProcedure };
|
||||
command.Parameters.AddWithValue("Category", NewCategoryNameTextBox.Text);
|
||||
|
||||
connection.Open();
|
||||
|
||||
CategoryIds.Add(NewCategoryNameTextBox.Text, Convert.ToInt32(command.ExecuteScalar()));
|
||||
|
||||
CategoryComboBoxManager.Items.Add(NewCategoryNameTextBox);
|
||||
|
||||
NewCategoryNameTextBox.Text = string.Empty;
|
||||
NewCategoryNameTextBox.Focus();
|
||||
|
||||
if (CategoryComboBoxManager.SelectedIndex == -1) CategoryComboBoxManager.SelectedIndex = 0;
|
||||
}
|
||||
|
||||
private void CreateNewSubCategoryButton_Click(object sender, EventArgs e)
|
||||
{
|
||||
using var connection = new SqlConnection(ConnectionString);
|
||||
using var command = new SqlCommand("CreateSubCategory", connection) { CommandType = CommandType.StoredProcedure };
|
||||
command.Parameters.AddWithValue("SubCategory", NewCategoryNameTextBox.Text);
|
||||
command.Parameters.AddWithValue("CategoryID", CategoryIds[CategoryComboBoxManager.Text]);
|
||||
|
||||
connection.Open();
|
||||
|
||||
SubCategoryIds.Add(NewCategoryNameTextBox.Text, Convert.ToInt32(command.ExecuteScalar()));
|
||||
|
||||
SubCategoryComboBoxManager.Items.Add(NewCategoryNameTextBox.Text);
|
||||
|
||||
NewCategoryNameTextBox.Text = string.Empty;
|
||||
NewCategoryNameTextBox.Focus();
|
||||
|
||||
SubCategoryComboBoxManager.Enabled = true;
|
||||
|
||||
if (SubCategoryComboBoxManager.SelectedIndex == -1) SubCategoryComboBoxManager.SelectedIndex = 0;
|
||||
}
|
||||
|
||||
private void DeleteCategoryButton_Click(object sender, EventArgs e)
|
||||
{
|
||||
using var connection = new SqlConnection(ConnectionString);
|
||||
using var command = new SqlCommand("DeleteCategory", connection) { CommandType = CommandType.StoredProcedure };
|
||||
command.Parameters.AddWithValue("CategoryID", CategoryIds[CategoryComboBoxManager.Text]);
|
||||
|
||||
connection.Open();
|
||||
|
||||
command.ExecuteNonQuery();
|
||||
|
||||
LoadCategories();
|
||||
}
|
||||
|
||||
private void DeleteSubCategoryButton_Click(object sender, EventArgs e)
|
||||
{
|
||||
using var connection = new SqlConnection(ConnectionString);
|
||||
using var command = new SqlCommand("DeleteSubCategory", connection) { CommandType = CommandType.StoredProcedure };
|
||||
command.Parameters.AddWithValue("SubCategoryID", SubCategoryIds[SubCategoryComboBoxManager.Text]);
|
||||
|
||||
connection.Open();
|
||||
|
||||
command.ExecuteNonQuery();
|
||||
|
||||
SubCategoryIds.Remove(SubCategoryComboBoxManager.Text);
|
||||
SubCategoryComboBoxManager.Items.RemoveAt(SubCategoryComboBoxManager.SelectedIndex);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user