<prompt> Tengeneza programu ya Fomu za C Windows inayounganishwa kwenye hifadhidata ya MySQL na kuonyesha orodha ya bidhaa katika kidhibiti cha DataGridView. Programu inapaswa kuruhusu watumiaji kuongeza, kuhariri na kufuta bidhaa. Kila bidhaa inapaswa kuwa na jina, maelezo, bei na aina. Tumia mbinu zinazofaa za uthibitishaji ili kuhakikisha kuwa ingizo la mtumiaji ni sahihi kabla ya kusasisha hifadhidata.PLINFORMAT  <response>: kutumia Mfumo;kwa kutumia System.Data;kwa kutumia Mfumo.Windows.Forms;kwa kutumia MySql.Data.MySqlClient;nafasi ya jina ProductManager darasa la sehemu ya umma Fomu kuu : Fomu muunganisho wa kibinafsi wa MySqlConnection; private string connectionString serverlocalhost;userroot;passwordyour_password;databaseyour_database; amri ya kibinafsi ya MySqlCommand; adapta ya kibinafsi ya MySqlDataAdapter; Jedwali la data la kibinafsi; PublicForm AnzishaComponent; LoadData; utupu binafsi LoadData jaribu muunganisho MySqlConnection mpyaconnectionString; muunganisho.Fungua; amri mpya MySqlCommandCHAGUA KUTOKA kwa bidhaa, unganisho; adapta mpya MySqlDataAdapteramri; dataTable DataTable mpya; adapta.JazaJedwali la data; productsDataGridView.DataSource dataTable; muunganisho.Funga; kukamata isipokuwa MessageBox.Onyeshaex.Message; Bool ya kibinafsi ValidateInputs ikiwa string.IsNullOrWhiteSpacejinaTextBox.Text string.IsNullOrWhiteSpacemaelezoTextBox.Text string.IsNullOrWhiteSpacebeiTextBox.Text string.IsNullOrWhiteSpacecategoryTextBox.Text MessageBox.ShowSehemu zote lazima zijazwe.; kurudi kwa uwongo; ikiwa !desimali.TryParsebeiTextBox.Text, out _ MessageBox.ShowBei lazima iwe nambari halali ya desimali.; kurudi kwa uwongo; kurudi kweli; utupu wa faragha ClearInputs nameTextBox.Futa; maelezoTextBox.Futa; priceTextBox.Clear; kitengoNakalaText.Clear; utupu wa faragha addButton_Clickmtumaji wa kitu, EventArgs e ikiwa !ValidateInputs itarudi; jaribu muunganisho.Fungua; amri mpya MySqlCommandINGIZA KATIKA bidhaa jina, maelezo, bei, kategoria THAMANI jina, maelezo, bei, category, muunganisho; amri.Parameters.AddWithValuename, nameTextBox.Text; amri.Parameters.AddWithValuemaelezo, maelezoTextBox.Text; amri.Parameters.AddWithValueprice, Convert.ToDecimalbeiTextBox.Text; amri.Parameters.AddWithValuecategory, kategoria yaTextBox.Text; amri.ExecuteNonQuery; LoadData; ClearInputs; muunganisho.Funga; kukamata isipokuwa MessageBox.Onyeshaex.Message; utupu wa faragha editButton_Clickmtumaji wa kitu, EventArgs e ikiwa !ValidateInputs itarudi; jaribu muunganisho.Fungua; amri mpya MySqlCommandSASISHA bidhaa SET jinajina, maelezomaelezo, beibei, kitengocategory WAPI idid, muunganisho; amri.Parameters.AddWithValueid, productsDataGridView.CurrentRow.Cells0.Thamani; amri.Parameters.AddWithValuename, nameTextBox.Text; amri.Parameters.AddWithValuemaelezo, maelezoTextBox.Text; amri.Parameters.AddWithValueprice, Convert.ToDecimalbeiTextBox.Text; amri.Parameters.AddWithValuecategory, kategoria yaTextBox.Text; amri.ExecuteNonQuery; LoadData; ClearInputs; muunganisho.Funga; kukamata isipokuwa MessageBox.Onyeshaex.Message; utupu wa faragha kufutaButton_Clickmtumaji wa kitu, EventArgs e jaribu muunganisho.Fungua; amri mpya MySqlCommandFUTA KUTOKA KWA bidhaa WAPI idid, muunganisho; command.Parameters.AddWithValueid, productsDataGridView.CurrentRow.Cells0.Thamani; amri.ExecuteNonQuery; LoadData; muunganisho.Funga; kukamata isipokuwa MessageBox.Onyeshaex.Message; 