using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using MySql.Data.MySqlClient;
namespace Products_Manager_App
{
public partial class Management_Form : Form
{
public Management_Form()
{
InitializeComponent();
}
MySqlConnection connection = new MySqlConnection("datasource = localhost;port = 3306; initial catalog = csharp_products; username = root; password =");
DataTable table = new DataTable();
int productIndex = 0;
// create a function to display products
public void showProducts()
{
// clear the datatable first
table.Clear();
dataGridViewProducts.DataSource = table;
MySqlDataAdapter adapter = new MySqlDataAdapter("SELECT * FROM `product`", connection);
adapter.Fill(table);
dataGridViewProducts.DataSource = table;
label_ProductsCount.Text = table.Rows.Count.ToString() + " Product";
}
// the form load
private void Management_Form_Load(object sender, EventArgs e)
{
// change DGV height
dataGridViewProducts.RowTemplate.Height = 40;
// display the close icon
pictureBoxClose.Image = Properties.Resources.close;
// display products on DGV
showProducts();
// select the first item in the combobox
comboBoxCategories.SelectedIndex = 0;
// customize DGV header
dataGridViewProducts.ColumnHeadersDefaultCellStyle.BackColor = Color.FromArgb(47,54,64);
dataGridViewProducts.ColumnHeadersDefaultCellStyle.ForeColor = Color.White;
dataGridViewProducts.ColumnHeadersDefaultCellStyle.Font = new System.Drawing.Font("Verdana", 15, FontStyle.Italic);
dataGridViewProducts.ColumnHeadersDefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
dataGridViewProducts.GridColor = Color.DarkBlue;
dataGridViewProducts.AllowUserToAddRows = false;
dataGridViewProducts.EnableHeadersVisualStyles = false;
}
// picturebox to close the form and connection
private void pictureBoxClose_Click(object sender, EventArgs e)
{
// close the connection
if (ConnectionState.Open == connection.State)
{
connection.Close();
}
// close the app
System.Environment.Exit(System.Environment.ExitCode);
}
// browse and display the image
// + the image path
private void buttonBrowse_Click(object sender, EventArgs e)
{
OpenFileDialog opf = new OpenFileDialog();
opf.Filter = "Choose Image(*.jpg;*.png;*.gif)|*.jpg;*.png;*.gif";
if(opf.ShowDialog() == DialogResult.OK)
{
pictureBoxProduct.Image = Image.FromFile(opf.FileName);
textBoxImagePath.Text = opf.FileName;
}
}
// button insert a new product
private void buttonAdd_Click(object sender, EventArgs e)
{
try
{
string name = textBoxName.Text;
string category = comboBoxCategories.Text;
int quantity = int.Parse(textBoxQuantity.Text);
float price = float.Parse(textBoxPrice.Text);
string imagePath = textBoxImagePath.Text;
MySqlCommand command = new MySqlCommand("INSERT INTO `product`(`name`, `category`, `quantity`, `price`, `picture`) VALUES (@nm,@ctg,@qty,@prc,@pic)", connection);
command.Parameters.Add("@nm", MySqlDbType.VarChar).Value = name;
command.Parameters.Add("@ctg", MySqlDbType.VarChar).Value = category;
command.Parameters.Add("@qty", MySqlDbType.Int16).Value = quantity;
command.Parameters.Add("@prc", MySqlDbType.Float).Value = price;
command.Parameters.Add("@pic", MySqlDbType.VarChar).Value = imagePath;
if (ConnectionState.Closed == connection.State)
{
connection.Open();
}
if (command.ExecuteNonQuery() == 1)
{
showProducts();
MessageBox.Show("The Product Has Been Added Successfully", "Product Added", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
else
{
MessageBox.Show("The Product Hasn't Been Added", "Product Not Added", MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
}
catch (Exception ex)
{
MessageBox.Show("Enter The Product Info", "Empty Fileds", MessageBoxButtons.OK, MessageBoxIcon.Stop);
}
}
// display the selected product info
private void dataGridViewProducts_Click(object sender, EventArgs e)
{
DataGridViewRow selectedRow = dataGridViewProducts.CurrentRow;
numericUpDownID.Value = int.Parse(selectedRow.Cells[0].Value.ToString());
textBoxName.Text = selectedRow.Cells[1].Value.ToString();
comboBoxCategories.Text = selectedRow.Cells[2].Value.ToString();
textBoxQuantity.Text = selectedRow.Cells[3].Value.ToString();
textBoxPrice.Text = selectedRow.Cells[4].Value.ToString();
textBoxImagePath.Text = selectedRow.Cells[5].Value.ToString();
pictureBoxProduct.Image = Image.FromFile(selectedRow.Cells[5].Value.ToString());
}
// button update the selected product
private void buttonEdit_Click(object sender, EventArgs e)
{
try
{
int id = (int)numericUpDownID.Value;
string name = textBoxName.Text;
string category = comboBoxCategories.Text;
int quantity = int.Parse(textBoxQuantity.Text);
float price = float.Parse(textBoxPrice.Text);
string imagePath = textBoxImagePath.Text;
MySqlCommand command = new MySqlCommand("UPDATE `product` SET `name`=@nm,`category`=@ctg,`quantity`=@qty,`price`=@prc,`picture`=@pic WHERE `id` = @id", connection);
command.Parameters.Add("@nm", MySqlDbType.VarChar).Value = name;
command.Parameters.Add("@ctg", MySqlDbType.VarChar).Value = category;
command.Parameters.Add("@qty", MySqlDbType.Int16).Value = quantity;
command.Parameters.Add("@prc", MySqlDbType.Float).Value = price;
command.Parameters.Add("@pic", MySqlDbType.VarChar).Value = imagePath;
command.Parameters.Add("@id", MySqlDbType.Int16).Value = id;
if (ConnectionState.Closed == connection.State)
{
connection.Open();
}
if (command.ExecuteNonQuery() == 1)
{
showProducts();
MessageBox.Show("The Product Info Has Been Edited Successfully", "Edit Product", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
else
{
MessageBox.Show("The Product Info Hasn't Been Edited", "Product Not Edited", MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
}
catch(Exception ex)
{
MessageBox.Show("Enter The Product Info", "Empty Fileds", MessageBoxButtons.OK, MessageBoxIcon.Stop);
}
}
// button search product by id
private void buttonSearch_Click(object sender, EventArgs e)
{
try
{
int id = (int)numericUpDownID.Value;
DataRow[] row = table.Select("id = " + id);
if(row.Length > 0)
{
textBoxName.Text = row[0][1].ToString();
comboBoxCategories.Text = row[0][2].ToString();
textBoxQuantity.Text = row[0][3].ToString();
textBoxPrice.Text = row[0][4].ToString();
textBoxImagePath.Text = row[0][5].ToString();
pictureBoxProduct.Image = Image.FromFile(row[0][5].ToString());
}
else
{
textBoxName.Text = "";
comboBoxCategories.SelectedIndex = 0;
textBoxQuantity.Text = "";
textBoxPrice.Text = "";
textBoxImagePath.Text = "";
pictureBoxProduct.Image = null;
MessageBox.Show("No Product With This ID, Enter a New One", "Product Not found", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
catch(Exception ex)
{
MessageBox.Show("Error -> " + ex.Message, "Product Not found", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
// button remove product by id
private void buttonRemove_Click(object sender, EventArgs e)
{
int id = (int)numericUpDownID.Value;
MySqlCommand command = new MySqlCommand("DELETE FROM `product` WHERE `id` = @id", connection);
command.Parameters.Add("@id", MySqlDbType.Int16).Value = id;
if (ConnectionState.Closed == connection.State)
{
connection.Open();
}
if(MessageBox.Show("Are You Sure You Want To Remove This Product","Remove Product",MessageBoxButtons.YesNo,MessageBoxIcon.Question) == System.Windows.Forms.DialogResult.Yes)
{
if (command.ExecuteNonQuery() == 1)
{
numericUpDownID.Value = 0;
textBoxName.Text = "";
comboBoxCategories.SelectedIndex = 0;
textBoxQuantity.Text = "";
textBoxPrice.Text = "";
textBoxImagePath.Text = "";
pictureBoxProduct.Image = null;
showProducts();
MessageBox.Show("Product Removed Successfully", "Remove Product", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
else
{
MessageBox.Show("Product NOT Removed", "Remove Product", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
// button -> show the first item
private void buttonFirst_Click(object sender, EventArgs e)
{
productIndex = 0;
displayInfo(productIndex);
}
// button -> show the next item
private void buttonNext_Click(object sender, EventArgs e)
{
productIndex ++;
if (productIndex > table.Rows.Count - 1) { productIndex = table.Rows.Count - 1; }
displayInfo(productIndex);
}
// button -> show the previous item
private void buttonPrevious_Click(object sender, EventArgs e)
{
productIndex --;
if (productIndex < 0) { productIndex = 0; }
displayInfo(productIndex);
}
// button -> show the last item
private void buttonLast_Click(object sender, EventArgs e)
{
productIndex = table.Rows.Count-1;
displayInfo(productIndex);
}
// create a function to display info
public void displayInfo(int index)
{
// select the DGV row
dataGridViewProducts.ClearSelection();
dataGridViewProducts.Rows[index].Selected = true;
numericUpDownID.Value = (int)table.Rows[index][0];
textBoxName.Text = table.Rows[index][1].ToString();
comboBoxCategories.Text = table.Rows[index][2].ToString();
textBoxQuantity.Text = table.Rows[index][3].ToString();
textBoxPrice.Text = table.Rows[index][4].ToString();
textBoxImagePath.Text = table.Rows[index][5].ToString();
pictureBoxProduct.Image = Image.FromFile(table.Rows[index][5].ToString());
}
// button to clear fields
private void buttonClear_Click(object sender, EventArgs e)
{
numericUpDownID.Value = 0;
textBoxName.Text = "";
comboBoxCategories.SelectedIndex = 0;
textBoxQuantity.Text = "";
textBoxPrice.Text = "";
textBoxImagePath.Text = "";
pictureBoxProduct.Image = null;
}
// allow only numbers in textboxquantity
private void textBoxQuantity_KeyPress(object sender, KeyPressEventArgs e)
{
// allow only numbers
// you can use a numericupdown
// or a maskedtextbox
if(!Char.IsControl(e.KeyChar) && !Char.IsDigit(e.KeyChar))
{
e.Handled = true;
}
}
// allow only float in textboxprice
private void textBoxPrice_KeyUp(object sender, KeyEventArgs e)
{
// allow the user to enter values that can be converted to float
// else remove the text
try
{
float price = float.Parse(textBoxPrice.Text);
}
catch(Exception ex)
{
MessageBox.Show("Enter a Valid Price ( " + ex.Message + " )","Invalid Price",MessageBoxButtons.OK,MessageBoxIcon.Error);
textBoxPrice.Text = "";
}
}
}
}