Files
invtory-desktop/InventoryTest/CategoryManager.cs
T

270 lines
10 KiB
C#

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);
}
}
}