Home

Georgetown Cleaning Services

 

The Data View

In a database environment, a query is a list of values created from another list. For example, a query can be created from a table by isolating records that follow a criterion. The .NET Framework supports queries through the DataView class. With a DataView object, you can create a selected list of records and you can then perform all types of regular operations of a database object, including:

  • Sorting Records
  • Filtering Records
  • Creating a new record
  • Updating one or more existing records

To create a DataView object, you can first declare a pointer to DataView. If you are working in Microsoft Visual Studio, in the Data section of the Toolbox, you can click the DataView button and click a container such as a form. After creating a DataView object, to perform a desired operation on it, you can use the SQL.

 

Practical Learning Practical Learning: Creating the Application

  1. Start Microsoft Visual Studio .NET or Visual C# and create a Windows Application named GCS3
  2. Design it as follows:
     
    Control Name Text Additional Properties
    GroupBox GroupBox   Order Identification  
    Label Label   Customer Name:  
    TextBox TextBox txtCustomerName    
    Label Label   Customer Phone:  
    TextBox TextBox txtCustomerPhone    
    Label Label   Date Left:  
    DateTimePicker DateTimePicker dtpDateLeft   Format: Custom
    Custom Format: dddd MMM dd, yyyy
    Label Label   Time Left:  
    DateTimePicker DateTimePicker dtpTimeLeft   Format: Time
    Label Label   Date Expected:  
    DateTimePicker DateTimePicker dtpDateExpected   Format: Custom
    Custom Format: dddd MMM dd, yyyy
    Label     Time Expected:  
    DateTimePicker DateTimePicker dtpTimeExpected   Format: Time
    GroupBox GroupBox   Order Processing  
    Label Label   Item Type  
    Label Label   Unit Price  
    Label Label   Qty  
    Label Label   Sub Total  
    Label Label   Shirts  
    TextBox TextBox txtShirtsUnitPrice 0.95 TextAlign: Right
    TextBox TextBox txtShirtsQuantity 0 TextAlign: Right
    Button Button btnCalcShirts   Image: SubTotal.ico
    TextBox TextBox txtShirtsSubTotal 0.00 TextAlign: Right
    Label Label   Pants  
    TextBox TextBox txtPantsUnitPrice 1.75 TextAlign: Right
    TextBox TextBox txtPantsQuantity   TextAlign: Right
    Button Button btnCalcPants   Image: SubTotal.ico
    TextBox TextBox txtPantsSubTotal 0.00 TextAlign: Right
    ComboBox ComboBox cboItem1 None  
    TextBox TextBox txtItem1UnitPrice 0.00 TextAlign: Right
    TextBox TextBox txtItem1Quantity 0 TextAlign: Right
    Button Button btnCalcItem1   Image: SubTotal.ico
    TextBox TextBox txtItem1SubTotal 0.00 TextAlign: Right
    ComboBox ComboBox cboItem2 None  
    TextBox TextBox txtItem2UnitPrice 0.00 TextAlign: Right
    TextBox TextBox txtItem2Quantity 0 TextAlign: Right
    Button Button btnCalcItem2   Image: SubTotal.ico
    TextBox TextBox txtItem2SubTotal 0.00 TextAlign: Right
    ComboBox ComboBox cboItem3 None  
    TextBox TextBox txtItem3UnitPrice 0.00 TextAlign: Right
    TextBox TextBox txtItem3Quantity 0 TextAlign: Right
    Button Button btnCalcItem3   Image: SubTotal.ico
    TextBox TextBox txtItem3SubTotal 0.00 TextAlign: Right
    ComboBox ComboBox cboItem4 None  
    TextBox TextBox txtItem4UnitPrice 0.00 TextAlign: Right
    TextBox TextBox txtItem4Quantity 0 TextAlign: Right
    Button Button btnCalcItem4   Image: SubTotal.ico
    TextBox TextBox txtItem4SubTotal 0.00 TextAlign: Right
    GroupBox GroupBox   Order Summary  
    Label Label   Cleaning Total:  
    TextBox TextBox txtOrderTotal 0.00 TextAlign: Right
    Label Label   Tax Rate:  
    TextBox TextBox txtTaxRate 5.75 TextAlign: Right
    Label Label   %  
    Label Label   Tax Amount:  
    TextBox TextBox txtTaxAmount 0.00 TextAlign: Right
    Label Label   Order Total:  
    TextBox TextBox txtOrderTotal 0.00 TextAlign: Right
    Button Button btnReset Reset  
    Button Button btnSave Save  
    Label Label   Enter Receipt Number:  
    TextBox TextBox txtReceiptNumber 0  
    Button Button btnOpen Open  
    Button Button btnClose Close  
  3. Click each combo box. Access its Items property and fill it up as follows:
     
  4. Click OK and save All
  5. On the Toolbox, click Data, click SqlDataAdapter and click an unoccupied area of the form
  6. In the first page of the Data Adapter Configuration Wizard, click Next
  7. In the second page of the wizard, click the arrow of the combo box. If you see a string that contains gcs, click it, and go to the next point.
    If you don't see gcs in the list, click New Connection...
    1. In the 1 combo box, select the server or type its name
    2. In the 2 section, click the Use Windows NT Integrated Security radio button
    3. In the 3 combo box, select the gcs database:
       
    4. Click OK
  8. Click Next
  9. Accept the Use New SQL Statement option and click Next
  10. Click Query Builder...
  11. In the Add Table dialog box, make sure CleaningOrders is selected. Click Add and click Close
  12. Click the *(All Columns) check box and click OK
  13. Click Next
     
  14. Click Finish
  15. On the main menu, click Data -> Generate Dataset...
  16. In the Generate Dataset dialog box, click the New radio button
  17. Set the name to dsCleaningOrders
     
  18. Click OK
  19. In the Data section of the Toolbox, click DataView and click the form
  20. In the Properties window, change its values as follows:
    (Name): dvwCleaningOrder
    Table: dsCleaningOrders1.CleaningOrders
  21. Right-click the form and click View Code
  22. Declare a private Boolean variable named IsNewOrder
     
    bool IsNewOrder;
  23. Return to the form, double-click an unoccupied area of the form to generate its Load event and implement it as follows:
     
    private void Form1_Load(object sender, System.EventArgs e)
    {
    	IsNewOrder = true;
    	this.sqlDataAdapter1.Fill(this.dsCleaningOrders1);
    }
  24. Return to the form, double-click the Reset button and implement its Click event as follows:
     
    private void btnReset_Click(object sender, System.EventArgs e)
    {
    	IsNewOrder = true;
    
    	this.txtCustomerName.Text = "";
    	this.txtCustomerPhone.Text = "";
    	this.dtpDateLeft.Value = DateTime.Today;
    	this.dtpTimeLeft.Value = DateTime.Now;
    	this.dtpDateExpected.Value = DateTime.Today;
    	this.dtpTimeExpected.Value = DateTime.Now;
    
    	this.txtShirtsUnitPrice.Text = "0.95";
    	this.txtShirtsQuantity.Text = "0";
    	this.txtShirtsSubTotal.Text = "0.00";
    	this.txtPantsUnitPrice.Text = "1.95";
    	this.txtPantsQuantity.Text  = "0";
    	this.txtPantsSubTotal.Text  = "0.00";
    
    	this.cboItem1.SelectedIndex = 0;
    	this.txtItem1UnitPrice.Text = "0.00";
    	this.txtItem1Quantity.Text  = "0";
    	this.txtItem1SubTotal.Text  = "0.00";
    
    	this.cboItem2.SelectedIndex = 0;
    	this.txtItem2UnitPrice.Text = "0.00";
    	this.txtItem2Quantity.Text  = "0";
    	this.txtItem2SubTotal.Text  = "0.00";
    
    	this.cboItem3.SelectedIndex = 0;
    	this.txtItem3UnitPrice.Text = "0.00";
    	this.txtItem3Quantity.Text  = "0";
    	this.txtItem3SubTotal.Text  = "0.00";
    
    	this.cboItem4.SelectedIndex = 0;
    	this.txtItem4UnitPrice.Text = "0.00";
    	this.txtItem4Quantity.Text  = "0";
    	this.txtItem4SubTotal.Text  = "0.00";
    
    	this.txtCleaningTotal.Text = "0.00";
    	this.txtTaxRate.Text = "5.75";
    	this.txtTaxAmount.Text = "0.00";
    	this.txtOrderTotal.Text = "0.00";
             this.txtReceiptNumber.Text = S"0";
    	this.txtCustomerName.Focus();
    }
  25. In the Class View, expand GCS3 followed by GCS3 and Form1
  26. Right-click Form1 -> Add -> Add Method...
  27. Set the characteristics as follows:
    Method Access: internal
    Return Type: void
    Method Name: CalculateCleaningOrder
  28. Click Finish and implement the method as follows:
     
    internal void CalculateCleaningOrder()
    {
    	decimal unitPriceShirts = 0.95M, unitPricePants = 1.75M, unitPrice1 = 0.00M,
    		unitPrice2 = 0.00M, unitPrice3 = 0.00M, unitPrice4 = 0.00M;
    	int qtyShirts = 1, qtyPants = 1, quantity1 = 1,
    		quantity2 = 1, quantity3 = 1, quantity4 = 1;
    	decimal subTotalShirts = 0, subTotalPants = 0, subTotal1 = 0,
    		subTotal2 = 0, subTotal3 = 0, subTotal4;
    
    	decimal cleaningTotal = 0.00M, taxRate = 5.75M,
    		taxAmount = 0.00M, orderTotal = 0.00M;
    
    	// Retrieve the unit price of this item
    	// Just in case the user types an invalid value, we are using a try...catch
    	try 
    	{
    		unitPriceShirts = decimal.Parse(this.txtShirtsUnitPrice.Text);
    	}
    	catch(FormatException)
    	{
    	MessageBox.Show("The value you entered for the price of shirts is not valid" +
    					"\nPlease try again");
    	}
    
    	// Retrieve the number of this item
    	// Just in case the user types an invalid value, we are using a try...catch
    	try 
    	{
    		qtyShirts  = int.Parse(this.txtShirtsQuantity.Text);
    	}
    	catch(FormatException)
    	{
    	MessageBox.Show("The value you entered for the number of shirts is not valid" +
    					"\nPlease try again");
    	}
    
    	// Calculate the sub-total for this item
    	subTotalShirts  = unitPriceShirts * qtyShirts;
    
    	// Display the sub-total in the corresponding text box
    	this.txtShirtsSubTotal.Text = subTotalShirts.ToString("F");
    
    	try 
    	{
    		unitPricePants = decimal.Parse(this.txtPantsUnitPrice.Text);
    	}
    	catch(FormatException)
    	{
    	MessageBox.Show("The value you entered for the price of pants is not valid" +
    					"\nPlease try again");
    	}
    
    	try 
    	{
    		qtyPants  = int.Parse(this.txtPantsQuantity.Text);
    	}
    	catch(FormatException)
    	{
    	MessageBox.Show("The value you entered for the number of pants is not valid" +
    					"\nPlease try again");
    	}
    
    	subTotalPants  = unitPricePants * qtyPants;
    	this.txtPantsSubTotal.Text = subTotalPants.ToString("F");
    
    	try 
    	{
    		unitPrice1 = decimal.Parse(this.txtItem1UnitPrice.Text);
    	}
    	catch(FormatException)
    	{
    	MessageBox.Show("The value you entered for the price is not valid" +
    					"\nPlease try again");
    	}
    
    	try 
    	{
    		quantity1  = int.Parse(this.txtItem1Quantity.Text);
    	}
    	catch(FormatException)
    	{
    		MessageBox.Show("The value you entered is not valid" +
    				"\nPlease try again");
    	}
    
    	subTotal1  = unitPrice1 * quantity1;
    	this.txtItem1SubTotal.Text = subTotal1.ToString("F");
    
    	try 
    	{
    		unitPrice2 = decimal.Parse(this.txtItem2UnitPrice.Text);
    	}
    	catch(FormatException)
    	{
    	MessageBox.Show("The value you entered for the price is not valid" +
    			"\nPlease try again");
    	}
    
    	try 
    	{
    		quantity2  = int.Parse(this.txtItem2Quantity.Text);
    	}
    	catch(FormatException)
    	{
    	MessageBox.Show("The value you entered is not valid" +
    			"\nPlease try again");
    	}
    
    	subTotal2  = quantity2 * unitPrice2;
    	this.txtItem2SubTotal.Text = subTotal2.ToString("F");
    
    	try 
    	{
    		quantity3  = int.Parse(this.txtItem3Quantity.Text);
    	}
    	catch(FormatException)
    	{
    		MessageBox.Show("The value you entered is not valid" +
    				"\nPlease try again");
    	}
    
    	try 
    	{
    		unitPrice3 = decimal.Parse(this.txtItem3UnitPrice.Text);
    	}
    	catch(FormatException)
    	{
    		MessageBox.Show("The value you entered for the price is not valid" +
    				"\nPlease try again");
    	}
    
    	subTotal3  = quantity3 * unitPrice3;
    	this.txtItem3SubTotal.Text = subTotal3.ToString("F");
    
    	try 
    	{
    		unitPrice4 = decimal.Parse(this.txtItem4UnitPrice.Text);
    	}
    	catch(FormatException)
    	{
    		MessageBox.Show("The value you entered for the price is not valid" +
    				"\nPlease try again");
    	}
    	try 
    	{
    		quantity4  = int.Parse(this.txtItem4Quantity.Text);
    	}
    	catch(FormatException)
    	{
    		MessageBox.Show("The value you entered is not valid" +
    				"\nPlease try again");
    	}
    
    	subTotal4  = quantity4 * unitPrice4;
    	this.txtItem4SubTotal.Text = subTotal4.ToString("F");
    
    	// Calculate the total
    	cleaningTotal = subTotalShirts + subTotalPants + subTotal1 +
    			subTotal2 + subTotal3 + subTotal4;
    
    	// Retrieve the value of the tax rate
    	try 
    	{
    		taxRate = decimal.Parse(this.txtTaxRate.Text);
    	}
    	catch(FormatException)
    	{
    		MessageBox.Show("The tax rate you entered is invalid" +
    				"\nPlease try again");
    	}
    
    	// Calculate the amount owed for the taxes
    	taxAmount = cleaningTotal * taxRate / 100;
    	// Add the tax amount to the total order
    	orderTotal  = cleaningTotal + taxAmount;
    			
    	// Display the values of the order summary
    	this.txtCleaningTotal.Text = cleaningTotal.ToString("F");
    	this.txtTaxAmount.Text  = taxAmount.ToString("F");
    	this.txtOrderTotal.Text   = orderTotal.ToString("F");
    }
  29. Return to the form and double-click the Save button
  30. In the top section of the file, under the other using lines, type:

    using System.Data.SqlClient;
  31. Implement its event as follows:
     
    private void btnSave_Click(object sender, System.EventArgs e)
    {
    	if( IsNewOrder == true )
    	{
    		string strInsert = "INSERT INTO CleaningOrders(" +
    			"CustomerName, CustomerPhone, DateLeft, " +
    			"TimeLeft, DateExpected, TimeExpected, " +
    			"ShirtsUnitPrice, ShirtsQuantity, " +
    			"ShirtsSubTotal, PantsUnitPrice, " +
    			"PantsQuantity, PantsSubTotal, Item1Name, " + 
    			"Item1UnitPrice, Item1Quantity, " +
    			"Item1SubTotal, Item2Name, Item2UnitPrice, " +
    			"Item2Quantity, Item2SubTotal, Item3Name, " +
    			"Item3UnitPrice, Item3Quantity, " +
    			"Item3SubTotal, Item4Name, Item4UnitPrice, " +
    		"Item4Quantity, Item4SubTotal, CleaningTotal, " +
    			"TaxRate, TaxAmount, OrderTotal) VALUES(" +
    			"'" + txtCustomerName.Text +
    			"', '" + txtCustomerPhone.Text +
    			"', '" + dtpDateLeft.Value +
    			"', '" + dtpTimeLeft.Value +
    			"', '" + dtpDateExpected.Value +
    			"', '" + dtpTimeExpected.Value +
    			"', '" + txtShirtsUnitPrice.Text +
    			"', '" + txtShirtsQuantity.Text +
    			"', '" + txtShirtsSubTotal.Text +
    			"', '" + txtPantsUnitPrice.Text +
    			"', '" + txtPantsQuantity.Text +
    			"', '" + txtPantsSubTotal.Text +
    			"', '" + cboItem1.Text +
    			"', '" + txtItem1UnitPrice.Text +
    			"', '" + txtItem1Quantity.Text +
    			"', '" + txtItem1SubTotal.Text +
    			"', '" + cboItem2.Text +
    			"', '" + txtItem2UnitPrice.Text +
    			"', '" + txtItem2Quantity.Text +
    			"', '" + txtItem2SubTotal.Text +
    			"', '" + cboItem3.Text +
    			"', '" + txtItem3UnitPrice.Text +
    			"', '" + txtItem3Quantity.Text +
    			"', '" + txtItem3SubTotal.Text + 
    			"', '" + cboItem4.Text +
    			"', '" + txtItem4UnitPrice.Text +
    			"', '" + txtItem4Quantity.Text +
    			"', '" + txtItem4SubTotal.Text +
    			"', '" + txtCleaningTotal.Text +
    			"', '" + txtTaxRate.Text +
    			"', '" + txtTaxAmount.Text +
    			"', '" + txtOrderTotal.Text + "');";
    
    SqlCommand cmdDatabase = new SqlCommand(strInsert, sqlConnection1);
    
    		sqlConnection1.Open();
    
    		cmdDatabase.ExecuteNonQuery();
    		sqlConnection1.Close();
    
    		this.btnReset_Click(sender, e);
    	}
    }
  32. Display the form and double-click the Open button
  33. Implement the event as follows:
     
    private void btnOpen_Click(object sender, System.EventArgs e)
    {
    	if( this.txtReceiptNumber.Text == "" )
    	{
    		MessageBox.Show("Please enter a receipt number");
    		this.txtReceiptNumber.Focus();
    		return;
    	}
    
    	int iReceiptNumber = int.Parse(this.txtReceiptNumber.Text);
    
    	this.sqlDataAdapter1.Fill(this.dsCleaningOrders1);
    this.dvwCleaningOrder.RowFilter = "CleaningOrderID = '" + iReceiptNumber.ToString() + "'";
    
    	this.txtCustomerName.DataBindings.Clear();
    	this.txtCustomerPhone.DataBindings.Clear();
    	this.dtpDateLeft.DataBindings.Clear();
    	this.dtpTimeLeft.DataBindings.Clear();
    	this.dtpDateExpected.DataBindings.Clear();
    	this.dtpTimeExpected.DataBindings.Clear();
    	this.txtShirtsUnitPrice.DataBindings.Clear();
    	this.txtShirtsQuantity.DataBindings.Clear(); 
    	this.txtShirtsSubTotal.DataBindings.Clear();
    	this.txtPantsUnitPrice.DataBindings.Clear();
    	this.txtPantsQuantity.DataBindings.Clear();
    	this.txtPantsSubTotal.DataBindings.Clear(); 
    	this.cboItem1.DataBindings.Clear(); 
    	this.txtItem1UnitPrice.DataBindings.Clear(); 
    	this.txtItem1Quantity.DataBindings.Clear(); 
    	this.txtItem1SubTotal.DataBindings.Clear(); 
    	this.cboItem2.DataBindings.Clear(); 
    	this.txtItem2UnitPrice.DataBindings.Clear(); 
    	this.txtItem2Quantity.DataBindings.Clear(); 
    	this.txtItem2SubTotal.DataBindings.Clear(); 
    	this.cboItem3.DataBindings.Clear(); 
    	this.txtItem3UnitPrice.DataBindings.Clear(); 
    	this.txtItem3Quantity.DataBindings.Clear(); 
    	this.txtItem3SubTotal.DataBindings.Clear(); 
    	this.cboItem4.DataBindings.Clear(); 
    	this.txtItem4UnitPrice.DataBindings.Clear(); 
    	this.txtItem4Quantity.DataBindings.Clear(); 
    	this.txtItem4SubTotal.DataBindings.Clear(); 
    	this.txtCleaningTotal.DataBindings.Clear(); 
    	this.txtTaxRate.DataBindings.Clear(); 
    	this.txtTaxAmount.DataBindings.Clear(); 
    	this.txtOrderTotal.DataBindings.Clear();
    
    	this.txtCustomerName.DataBindings.Add("Text", this.dvwCleaningOrder, "CustomerName");
    	this.txtCustomerPhone.DataBindings.Add("Text", this.dvwCleaningOrder, "CustomerPhone");
    	this.dtpDateLeft.DataBindings.Add("Value", this.dvwCleaningOrder, "DateLeft");
    	this.dtpTimeLeft.DataBindings.Add("Value", this.dvwCleaningOrder, "TimeLeft");
    	this.dtpDateExpected.DataBindings.Add("Value", this.dvwCleaningOrder, "DateExpected");
    	this.dtpTimeExpected.DataBindings.Add("Value", this.dvwCleaningOrder, "TimeExpected");
    	this.txtShirtsUnitPrice.DataBindings.Add("Text", this.dvwCleaningOrder, "ShirtsUnitPrice");
    	this.txtShirtsQuantity.DataBindings.Add("Text", this.dvwCleaningOrder, "ShirtsQuantity");
    	this.txtShirtsSubTotal.DataBindings.Add("Text", this.dvwCleaningOrder, "ShirtsSubTotal");
    	this.txtPantsUnitPrice.DataBindings.Add("Text", this.dvwCleaningOrder, "PantsUnitPrice");
    	this.txtPantsQuantity.DataBindings.Add("Text", this.dvwCleaningOrder, "PantsQuantity");
    	this.txtPantsSubTotal.DataBindings.Add("Text", this.dvwCleaningOrder, "PantsSubTotal");
    	this.cboItem1.DataBindings.Add("Text", this.dvwCleaningOrder, "Item1Name");
    	this.txtItem1UnitPrice.DataBindings.Add("Text", this.dvwCleaningOrder, "Item1UnitPrice");
    	this.txtItem1Quantity.DataBindings.Add("Text", this.dvwCleaningOrder, "Item1Quantity");
    	this.txtItem1SubTotal.DataBindings.Add("Text", this.dvwCleaningOrder, "Item1SubTotal");
    	this.cboItem2.DataBindings.Add("Text", this.dvwCleaningOrder, "Item2Name");
    	this.txtItem2UnitPrice.DataBindings.Add("Text", this.dvwCleaningOrder, "Item2UnitPrice");
    	this.txtItem2Quantity.DataBindings.Add("Text", this.dvwCleaningOrder, "Item2Quantity");
    	this.txtItem2SubTotal.DataBindings.Add("Text", this.dvwCleaningOrder, "Item2SubTotal");
    	this.cboItem3.DataBindings.Add("Text", this.dvwCleaningOrder, "Item3Name");
    	this.txtItem3UnitPrice.DataBindings.Add("Text", this.dvwCleaningOrder, "Item3UnitPrice");
    	this.txtItem3Quantity.DataBindings.Add("Text", this.dvwCleaningOrder, "Item3Quantity");
    	this.txtItem3SubTotal.DataBindings.Add("Text", this.dvwCleaningOrder, "Item3SubTotal");
    	this.cboItem4.DataBindings.Add("Text", this.dvwCleaningOrder, "Item4Name");
    	this.txtItem4UnitPrice.DataBindings.Add("Text", this.dvwCleaningOrder, "Item4UnitPrice");
    	this.txtItem4Quantity.DataBindings.Add("Text", this.dvwCleaningOrder, "Item4Quantity");
    	this.txtItem4SubTotal.DataBindings.Add("Text", this.dvwCleaningOrder, "Item4SubTotal");
    	this.txtCleaningTotal.DataBindings.Add("Text", this.dvwCleaningOrder, "CleaningTotal");
    	this.txtTaxRate.DataBindings.Add("Text", this.dvwCleaningOrder, "TaxRate");
    	this.txtTaxAmount.DataBindings.Add("Text", this.dvwCleaningOrder, "TaxAmount");
    	this.txtOrderTotal.DataBindings.Add("Text", this.dvwCleaningOrder, "OrderTotal");
    
    	IsNewOrder = false;
    }
  34. In the Class View, right-click Form1 -> Add -> Add Method...
  35. Set the characteristics as follows:
    Method Access: internal
    Return Type: void
    Function Name: UpdateCleaningOrder
     
  36. Click Finish and implement the event as follows:
     
    /// <summary>
    /// This method is used to update an existing record if the user changes any of its values
    /// </summary>
    internal void UpdateCleaningOrder()
    {
    	// Find out if this is a new, usually started as blank, order
    	 // If it is, trust that the user will save it by clicking the Save button
    	 // If it's not, then, if the user changed the string that was in the
    	 // Customer Name text box, update the current record
    	 if( IsNewOrder == false )
    	 {
    	 string strUpdate = "UPDATE CleaningOrders " +
                           "SET CustomerName = '" +  this.txtCustomerName.Text + "', " +
    		 "CustomerPhone = '" +  this.txtCustomerPhone.Text + "', " +
    		 "DateLeft = '" + this.dtpDateLeft.Value.ToString() + "', " +
    		 "TimeLeft = '" + this.dtpTimeLeft.Value.ToString() + "', " +
    		"DateExpected = '" + this.dtpDateExpected.Value.ToString() + "', " +
    		"TimeExpected = '" + this.dtpTimeExpected.Value.ToString() + "', " +
    		"ShirtsUnitPrice = '" + this.txtShirtsUnitPrice.Text + "', " +
    		"ShirtsQuantity = '" + this.txtShirtsQuantity.Text + "', " +
    		"ShirtsSubTotal = '" + this.txtShirtsSubTotal.Text + "', " +
    		"PantsUnitPrice = '" + this.txtPantsUnitPrice.Text + "', " +
    		"PantsQuantity = '" + this.txtPantsQuantity.Text + "', " +
    		"PantsSubTotal = '" + this.txtPantsSubTotal.Text + "', " +
    		"Item1Name = '" + this.cboItem1.Text + "', " +
    		"Item1UnitPrice = '" + this.txtItem1UnitPrice.Text + "', " +
    		"Item1Quantity = '" + this.txtItem1Quantity.Text + "', " +
    		"Item1SubTotal = '" + this.txtItem1SubTotal.Text + "', " +
    		"Item2Name = '" + this.cboItem2.Text + "', " +
    		"Item2UnitPrice = '" + this.txtItem2UnitPrice.Text + "', " +
    		"Item2Quantity = '" + this.txtItem2Quantity.Text + "', " +
    		"Item2SubTotal = '" + this.txtItem2SubTotal.Text + "', " +
    		"Item3Name = '" + this.cboItem3.Text + "', " +
    		"Item3UnitPrice = '" + this.txtItem3UnitPrice.Text + "', " +
    		"Item3Quantity = '" + this.txtItem3Quantity.Text + "', " +
    		"Item3SubTotal = '" + this.txtItem3SubTotal.Text + "', " +
    		"Item4Name = '" + this.cboItem4.Text + "', " +
    		"Item4UnitPrice = '" + this.txtItem4UnitPrice.Text + "', " +
    		"Item4Quantity = '" + this.txtItem4Quantity.Text + "', " +
    		"Item4SubTotal = '" + this.txtItem4SubTotal.Text + "', " +
    		"CleaningTotal = '" + this.txtCleaningTotal.Text + "', " +
    		"TaxRate = '" + this.txtTaxRate.Text + "', " +
    		"TaxAmount = '" + this.txtTaxAmount.Text + "', " +
    		"OrderTotal = '" + this.txtOrderTotal.Text + "' " +
    		"WHERE CleaningOrderID = '" +
    		this.txtReceiptNumber.Text + "';";
    
    	 SqlCommand    cmdDatabase = new SqlCommand(strUpdate, sqlConnection1);
    
    	 sqlConnection1.Open();
    
    	 cmdDatabase.ExecuteNonQuery();
    	 sqlConnection1.Close();
    	 }
    }
  37. Return to the form and click the Customer Name text box
  38. In the Properties window, click the Events button and double-click Leave
  39. Implement its event as follows:
     
    private void txtCustomerName_Leave(object sender, System.EventArgs e)
    {
    	if( IsNewOrder == false )
    	{
    		UpdateCleaningOrder();
    	}
    }
  40. Return to the form and click the Customer Phone text box
  41. In the Events section of the Properties window, double-click Leave and implement its event as follows:
     
    private void txtCustomerPhone_Leave(object sender, System.EventArgs e)
    {
    	if( IsNewOrder == false )
    	{
    		UpdateCleaningOrder();
    	}
    }
  42. Return to the form and double-click the Date Left date time picker control
  43. Implement its ValueChanged event as follows:
     
    private void dtpDateLeft_ValueChanged(object sender, System.EventArgs e)
    {
    	DateTime dateLeft = this.dtpDateLeft.Value;
    	DateTime timeLeft = this.dtpTimeLeft.Value;
    	DateTime time9AM  = new DateTime(timeLeft.Year, timeLeft.Month, timeLeft.Day, 9, 0, 0);
    
    	// If the customer leaves clothes before 9AM...
    	if( timeLeft <= time9AM )
    	{
    		// ... then they should be ready the same day after 5PM
    		this.dtpDateExpected.Value = dateLeft;
    this.dtpTimeExpected.Value = new DateTime(dateLeft.Year, dateLeft.Month, dateLeft.Day, 17, 0, 0);
    	}
    	else
    	{
    	// If the clothese were left after 9AM, they will be availablethe following morning at 8AM
    	this.dtpDateExpected.Value = new DateTime(dateLeft.Year, dateLeft.Month, dateLeft.Day + 1); 
    	this.dtpTimeExpected.Value = new DateTime(dateLeft.Year, dateLeft.Month, dateLeft.Day + 1, 8, 0, 0);
    	}
    	
    	if( IsNewOrder == false )
    	{
    		UpdateCleaningOrder();
    	}
    }
  44. Return to the form and double-click the Time Left date time picker control
  45. Implement its ValueChanged event as follows:
     
    private void dtpTimeLeft_ValueChanged(object sender, System.EventArgs e)
    {
    	DateTime dateLeft = this.dtpDateLeft.Value;
    	DateTime timeLeft = this.dtpTimeLeft.Value;
    	DateTime time9AM  = new DateTime(timeLeft.Year, timeLeft.Month, timeLeft.Day, 9, 0, 0);
    
    	// If the customer leaves clothes before 9AM...
    	if( timeLeft <= time9AM )
    		{
    		// ... then they should be ready the same day after 5PM
    		this.dtpDateExpected.Value = dateLeft;
    this.dtpTimeExpected.Value = new DateTime(dateLeft.Year, dateLeft.Month, dateLeft.Day, 17, 0, 0);
    	}
    	else
    	{
    	// If the clothese were left after 9AM, they will be availablethe following morning at 8AM
    	this.dtpDateExpected.Value = new DateTime(dateLeft.Year, dateLeft.Month, dateLeft.Day + 1); 
    this.dtpTimeExpected.Value = new DateTime(dateLeft.Year, dateLeft.Month, dateLeft.Day + 1, 8, 0, 0);
    	}
    	
    	if( IsNewOrder == false )
    	{
    		UpdateCleaningOrder();
    	}
    }
  46. Return to the form and double-click the Date Expected date time picker control
  47. Implement its ValueChanged event as follows:
     
    private void dtpDateExpected_ValueChanged(object sender, System.EventArgs e)
    {
    	if( IsNewOrder == false )
    		UpdateCleaningOrder();
    }
  48. Return to the form and double-click the Time Expected date time picker control
  49. Implement its ValueChanged event as follows:
     
    private void dtpTimeExpected_ValueChanged(object sender, System.EventArgs e)
    {
    	if( IsNewOrder == false )
    		UpdateCleaningOrder();
    }
  50. Return to the form and click the Unit Price text box corresponding to the Shirts
  51. In the Events section of the Properties window, double-click Leave and implement its event as follows:
     
    private void txtShirtsUnitPrice_Leave(object sender, System.EventArgs e)
    {
    	CalculateCleaningOrder();
    
    	if( IsNewOrder == false )
    		UpdateCleaningOrder();
    }
  52. Return to the form and click the Qty text box corresponding to the Shirts
  53. In the Events section of the Properties window, double-click Leave and implement its event as follows:
     
    private void txtShirtsQuantity_Leave(object sender, System.EventArgs e)
    {
    	CalculateCleaningOrder();
    
    	if( IsNewOrder == false )
    		UpdateCleaningOrder();
    }
  54. Return to the form and click the Unit Price text box corresponding to the Pants
  55. In the Events section of the Properties window, double-click Leave and implement its event as follows:
     
    private void txtPantsUnitPrice_Leave(object sender, System.EventArgs e)
    {
    	CalculateCleaningOrder();
    
    	if( IsNewOrder == false )
    		UpdateCleaningOrder();
    }
  56. Return to the form and click the Qty text box corresponding to the Pants
  57. In the Events section of the Properties window, double-click Leave and implement its event as follows:
     
    private void txtPantsQuantity_Leave(object sender, System.EventArgs e)
    {
    	CalculateCleaningOrder();
    
    	if( IsNewOrder == false )
    		UpdateCleaningOrder();
    }
  58. Return to the form and double-click the first combo box under Pants
  59. Implement its event as follows:
     
    private void cboItem1_SelectedIndexChanged(object sender, System.EventArgs e)
    {
    	if( this.cboItem1.Text == "None" )
    	{
    		this.txtItem1UnitPrice.Text = "0.00";
    		this.txtItem1Quantity.Text  = "0";
    		this.txtItem1SubTotal.Text  = "0.00";
    	}
    
    	CalculateCleaningOrder();
    
    	if( IsNewOrder == false )
    		UpdateCleaningOrder();
    }
  60. Return to the form and click the Unit Price text box corresponding to the first combo box
  61. In the Events section of the Properties window, double-click Leave and implement its event as follows:
     
    private void txtItem1UnitPrice_Leave(object sender, System.EventArgs e)
    {
    	CalculateCleaningOrder();
    
    	if( IsNewOrder == false )
    		UpdateCleaningOrder();
    }
  62. Return to the form and click the Qty text box corresponding to the first combo box
  63. In the Events section of the Properties window, double-click Leave and implement its event as follows:
     
    private void txtItem1Quantity_Leave(object sender, System.EventArgs e)
    {
    	CalculateCleaningOrder();
    
    	if( IsNewOrder == false )
    		UpdateCleaningOrder();
    }
  64. Return to the form and double-click the second combo box under Pants
  65. Implement its event as follows:
     
    private void cboItem2_SelectedIndexChanged(object sender, System.EventArgs e)
    {
    	if( this.cboItem2.Text == "None" )
    	{
    		this.txtItem2UnitPrice.Text = "0.00";
    		this.txtItem2Quantity.Text  = "0";
    		this.txtItem2SubTotal.Text  = "0.00";
    	}
    
    	CalculateCleaningOrder();
    
    	if( IsNewOrder == false )
    		UpdateCleaningOrder();
    }
  66. Return to the form and click the Unit Price text box corresponding to the second combo box
  67. In the Events section of the Properties window, double-click Leave and implement its event as follows:
     
    private void txtItem2UnitPrice_Leave(object sender, System.EventArgs e)
    {
    	CalculateCleaningOrder();
    
    	if( IsNewOrder == false )
    		UpdateCleaningOrder();
    }
  68. Return to the form and click the Qty text box corresponding to the second combo box
  69. In the Events section of the Properties window, double-click Leave and implement its event as follows:
     
    private void txtItem2Quantity_Leave(object sender, System.EventArgs e)
    {
    	CalculateCleaningOrder();
    
    	if( IsNewOrder == false )
    		UpdateCleaningOrder();
    }
  70. Return to the form and double-click the third combo box under Pants
  71. Implement its event as follows:
     
    private void cboItem3_SelectedIndexChanged(object sender, System.EventArgs e)
    {
    	if( this.cboItem3.Text == "None" )
    	{
    		this.txtItem3UnitPrice.Text = "0.00";
    		this.txtItem3Quantity.Text  = "0";
    		this.txtItem3SubTotal.Text  = "0.00";
    	}
    
    	CalculateCleaningOrder();
    
    	if( IsNewOrder == false )
    		UpdateCleaningOrder();
    }
  72. Return to the form and click the Unit Price text box corresponding to the third combo box
  73. In the Events section of the Properties window, double-click Leave and implement its event as follows:
     
    private void txtItem3UnitPrice_Leave(object sender, System.EventArgs e)
    {
    	CalculateCleaningOrder();
    
    	if( IsNewOrder == false )
    		UpdateCleaningOrder();
    }
  74. Return to the form and click the Qty text box corresponding to the third combo box
  75. In the Events section of the Properties window, double-click Leave and implement its event as follows:
     
    private void txtItem3Quantity_Leave(object sender, System.EventArgs e)
    {
    	CalculateCleaningOrder();
    
    	if( IsNewOrder == false )
    		UpdateCleaningOrder();
    }
  76. Return to the form and double-click the fourth combo box under Pants
  77. Implement its event as follows:
     
    private void cboItem4_SelectedIndexChanged(object sender, System.EventArgs e)
    {
    	if( this.cboItem4.Text == "None" )
    	{
    		this.txtItem4UnitPrice.Text = "0.00";
    		this.txtItem4Quantity.Text  = "0";
    		this.txtItem4SubTotal.Text  = "0.00";
    	}
    
    	CalculateCleaningOrder();
    
    	if( IsNewOrder == false )
    		UpdateCleaningOrder();
    }
  78. Return to the form and click the Unit Price text box corresponding to the fourth combo box
  79. In the Events section of the Properties window, double-click Leave and implement its event as follows:
     
    private void txtItem4UnitPrice_Leave(object sender, System.EventArgs e)
    {
    	CalculateCleaningOrder();
    
    	if( IsNewOrder == false )
    		UpdateCleaningOrder();
    }
  80. Return to the form and click the Qty text box corresponding to the fourth combo box
  81. In the Events section of the Properties window, double-click Leave and implement its event as follows:
     
    private void txtItem4Quantity_Leave(object sender, System.EventArgs e)
    {
    	CalculateCleaningOrder();
    
    	if( IsNewOrder == false )
    		UpdateCleaningOrder();
    }
  82. Return to the form and click the Tax Rate text box
  83. In the Events section of the Properties window, double-click Leave and implement its event as follows:
     
    private void txtTaxRate_Leave(object sender, System.EventArgs e)
    {
    	CalculateCleaningOrder();
    
    	if( IsNewOrder == false )
    		UpdateCleaningOrder();
    }
  84. Display the form and double-click the Close button
  85. Implement its event as follows:
     
    private void btnClose_Click(object sender, System.EventArgs e)
    {
    	Close();
    }
  86. Execute the application and create a few cleaning orders
     
    Georgetown Cleaning Services - Cleaning Order
    Georgetown Cleaning Services - Cleaning Order
  87. Close the form
  88. Execute the application again and try opening a cleaning order whose receipt number is 1001, then 1002, then 1003
  89. Change some values of an order
  90. Close the form

Previous Copyright © 2005-2016, FunctionX