Home

XML-Based Applications:
College Park Auto-Parts

 
 

Order Processing

Order processing consists of receiving requests from a customer and finding the items that the customer wants. To make this easy, as mentioned already, we created a form that allows the user to select the year, the make, the model, and the item's category. Once these selections are made, a list view displays the items that are available based on these criteria. To select an item and make it part of the order, the user can double-click it in the list view. This action copies the item by its item number, its name, and its unit price. It also sets its quantity to 1. The user can also change the quantity.

The calculations are made automatically so the user doesn't have to click a button or use a calculator.

Practical Learning Practical Learning: Processing Orders

  1. Display the OrderProcessing form
  2. Double-click the Year combo box and implement its SelectedIndexChanged event as follows:
     
    System::Void cboYears_SelectedIndexChanged(System::Object *  sender, System::EventArgs *  e)
    {
    	 String *strYearSelected = this->cboYears->Text;
    	 String *strMake = 0;
    	 XmlDocument *docXML = new XmlDocument;
    		
    	 // Open the Parts.xml file
    	 docXML->Load(S"Parts.xml");
    			 
    	 // We will empty the Make combo box to add a new list
    	 this->cboMakes->Items->Clear();
    	 // We will empty the Model combo box because the car is about to be changed
    	 this->cboModels->Items->Clear();
    	 // Also empty the list of available parts
    	 this->lvwAvailableParts->Items->Clear();
    	 
    	 // Create a list of the nodes whose names are CarYear
    	 XmlNodeList *nodYears = docXML->GetElementsByTagName(S"CarYear");
    	 // Create a list of the nodes whose names are Make
    	 XmlNodeList *nodMakes = docXML->GetElementsByTagName(S"Make");
    
    	 // Check every CarYear node to see if its value matches the selected year
    	 for(int i = 0; i < nodYears->Count; i++)
    	 {
    		 // If the CarYear of the current node is the same as the
    		 // selected year, add its corresponding make to the Make combo box
    		 if( nodYears->ItemOf[i]->InnerXml->Equals(strYearSelected) )
    		 {
    			 strMake = nodMakes->ItemOf[i]->InnerText;
    			 // Before adding the Make to the list, make sure that it doesn't
    			 // exist already in the combo box
    			 if( !this->cboMakes->Items->Contains(strMake) )
    				 this->cboMakes->Items->Add(strMake);
    		 }
    	 }
    }
  3. Return to the Order Processing form and double-click the Make combo box
  4. Implement its SelectedIndexChanged event as follows:
     
    System::Void cboMakes_SelectedIndexChanged(System::Object *  sender, System::EventArgs *  e)
    {
    	 // Get the year that was selected
    	 String *strYearSelected = this->cboYears->Text;
    	 // Get the make that is selected
    	 String *strMakeSelected = this->cboMakes->Text;
    	 // We will need a model string
    	 String *strModel = 0;
    	 // We will use a reference to the XML document
    	 XmlDocument *docXML = new XmlDocument;
    			 
    	 // Open the Parts.xml file
    	 docXML->Load(S"Parts.xml");
    			 
    	 // We will empty the Model combo box to add a new list
    	 this->cboModels->Items->Clear();
    	 // Also empty the list of available parts
    	 this->lvwAvailableParts->Items->Clear();
    
    	 // Create a list of the nodes we will need to locate
    	 XmlNodeList *nodYears  = docXML->GetElementsByTagName(S"CarYear");
    	 XmlNodeList *nodMakes  = docXML->GetElementsByTagName(S"Make");
    	 XmlNodeList *nodModels = docXML->GetElementsByTagName(S"Model");
    
    	 // Check every CarYear node to see if its 
    	 // value matches the selected year
    	 for(int i = 0; i < nodYears->Count; i++)
    	 {
    		 // If the CarYear of the current node is the same as the
    		 // selected year, check its corresponding make to see whether
    		 // it matches the selected Make
    		 // If both the year and the make selected match, then add the
    		 // corresponding model to the Model combo box
    		 if( (nodYears->ItemOf[i]->InnerXml->Equals(strYearSelected)) &&
    			 (nodMakes->ItemOf[i]->InnerXml->Equals(strMakeSelected)) )
    		 {
    			 strModel = nodModels->ItemOf[i]->InnerText;
    			 // Before adding the model to the Model combo box, make sure 
    			 // that it doesn't exist already in the list
    			 if( this->cboModels->Items->Contains(strModel) )
    				 break;
    			 else // If it doesn't, then add it
    				 this->cboModels->Items->Add(strModel);
    		 }
    	 }
    }
  5. Return to the Order Processing form and double-click the Model combo box
  6. Implement its SelectedIndexChanged event as follows:
     
    System::Void cboModels_SelectedIndexChanged(System::Object *  sender, System::EventArgs *  e)
    {
    	 // Get the year that was selected
    	 String *strYearSelected = this->cboYears->Text;
    	 // Get the make that is selected
    	 String *strMakeSelected = this->cboMakes->Text;
    	 // We will need a model string
    	 String *strModelSelected = this->cboModels->Text;
    
    	 // We will use a reference to the XML document
    	 XmlDocument *docXML = new XmlDocument;		 
    	 // Open the Parts.xml file
    	 docXML->Load(S"Parts.xml");	 
    	 
    	 // Empty the Category combo box
    	 this->cboCategories->Items->Clear();
    	 // Empty the list of available parts
    	 this->lvwAvailableParts->Items->Clear();
    
    	 // Create a list of the nodes we will need to locate
    	 XmlNodeList *nodYears     = docXML->GetElementsByTagName(S"CarYear");
    	 XmlNodeList *nodMakes     = docXML->GetElementsByTagName(S"Make");
    	 XmlNodeList *nodModels    = docXML->GetElementsByTagName(S"Model");
    	 XmlNodeList *nodPartNames = docXML->GetElementsByTagName(S"PartName");
    
    	 // Check every CarYear node to see if its 
    	 // value matches the selected year
    	 for(int i = 0; i < nodYears->Count; i++)
    	 {
    		 // If the CarYear of the current node is the same as the
    		 // selected year, check its corresponding make and model to see whether
    		 // they match the selected Make and Model
    		 if( (nodYears->ItemOf[i]->InnerXml->Equals(strYearSelected)) &&
    			 (nodMakes->ItemOf[i]->InnerXml->Equals(strMakeSelected)) &&
    			 (nodModels->ItemOf[i]->InnerXml->Equals(strModelSelected)) )
    		 {
    		// If you find a part that match the year, the make, and the model selected,
    		 // then retrieve the (first/only) attribute of the Part Name element
    	XmlAttribute *nodCategory = nodPartNames->ItemOf[i]->Attributes->ItemOf[S"Category"];
    			 // Add the category to the Categories combo box
    		 String *strCategory = nodCategory->InnerText;
    			 // Before adding the model to the Model combo box, make sure 
    			 // that it doesn't exist already in the list
    			 if( this->cboCategories->Items->Contains(strCategory) )
    				 break;
    			 else // If it doesn't, then add it
    				 this->cboCategories->Items->Add(strCategory);
    		 }
    	 }
    }
  7. Return to the Order Processing form and double-click the Category combo box
  8. Implement its SelectedIndexChanged event as follows:
     
    System::Void cboCategories_SelectedIndexChanged(System::Object *  sender, System::EventArgs *  e)
    {
    	 // Get the values the user has selected
    	 String *strYearSelected = this->cboYears->Text;
    	 String *strMakeSelected = this->cboMakes->Text;
    	 String *strModelSelected = this->cboModels->Text;
    	 String *strCategorySelected = this->cboCategories->Text;
    			 
    	 // Open the Parts.xml file
    	 XmlDocument *docXML = new XmlDocument;
    	 docXML->Load(S"Parts.xml");
    			 
    	 // Empty the list of available parts
    	 this->lvwAvailableParts->Items->Clear();
    		 
    	 // Create a list of the nodes we will need to locate
    	 XmlNodeList *nodYears     = docXML->GetElementsByTagName(S"CarYear");
    	 XmlNodeList *nodMakes     = docXML->GetElementsByTagName(S"Make");
    	 XmlNodeList *nodModels    = docXML->GetElementsByTagName(S"Model");
    	 XmlNodeList *nodPartNbr   = docXML->GetElementsByTagName(S"PartNumber");
    	 XmlNodeList *nodPartNames = docXML->GetElementsByTagName(S"PartName");
    	 XmlNodeList *nodPrices    = docXML->GetElementsByTagName(S"UnitPrice");
    
    	 // Check every CarYear node to see if its 
    	 // value matches the selected year
    	 for(int i = 0; i < nodYears->Count; i++)
    	 {
    	 XmlAttribute *nodCategory = nodPartNames->ItemOf[i]->Attributes->ItemOf[S"Category"];
    		 // Find the year, make, model, and category that match the selected
    		 if( (nodYears->ItemOf[i]->InnerXml->Equals(strYearSelected)) &&
    			 (nodMakes->ItemOf[i]->InnerXml->Equals(strMakeSelected)) &&
    			 (nodModels->ItemOf[i]->InnerXml->Equals(strModelSelected)) &&
    			 (nodCategory->InnerText->Equals(strCategorySelected)) )
    		 {
    			 // Create a list view item of the part of the current model
    		ListViewItem *itmPart = new ListViewItem(nodPartNbr->ItemOf[i]->InnerText, 0);
    			 itmPart->SubItems->Add(nodPartNames->ItemOf[i]->InnerText);
    			 itmPart->SubItems->Add(nodPrices->ItemOf[i]->InnerText);
    			 // And display that list to the list view control
    			 this->lvwAvailableParts->Items->Add(itmPart);
    		 }
    	 }
    }
  9. In Class View, expand CPA3 and CPA3
  10. Right-click OrderProcessing -> Add -> Add Function...
  11. Set the Return Type to void
  12. Set the Function Name to CalculateTotalOrder
  13. Set the Access to private
  14. Click Finish and implement the method as follows:
     
    void CalculateTotalOrder(void)
    {
    	 double subTotal1, subTotal2, subTotal3,
                                 subTotal4, subTotal5, subTotal6;
    	double orderTotal;
    
    	// Retrieve the value of each sub total
    	subTotal1 = this->txtSubTotal1->Text->ToDouble(0);
    	subTotal2 = this->txtSubTotal2->Text->ToDouble(0);
    	subTotal3 = this->txtSubTotal3->Text->ToDouble(0);
    	subTotal4 = this->txtSubTotal4->Text->ToDouble(0);
    	subTotal5 = this->txtSubTotal5->Text->ToDouble(0);
    	subTotal6 = this->txtSubTotal6->Text->ToDouble(0);
    
    	// Calculate the total value of the sub totals
    	orderTotal = subTotal1 + subTotal2 + subTotal3 + 
    		    subTotal4 + subTotal5 + subTotal6;
    			
    	// Display the total order in the appropriate text box
    	this->txtTotalOrder->Text = orderTotal.ToString(S"F");
    }
  15. Display the Order Processing form
  16. Click the Available Parts list view. In the Properties window, click the Events button Events and double-click the DoubleClick field
  17. Implement the event as follows:
     
    System::Void lvwAvailableParts_DoubleClick(System::Object *  sender, System::EventArgs *  e)
    {
    	 ListViewItem *itmSelectedPart = this->lvwAvailableParts->SelectedItems->Item[0];
    			 
    	 // Check the first empty row in the Order Processing section
    	 // and fill it up with the newly selected item
    	 if( this->txtPartNumber1->Text->Equals(S"") )
    	 {
    		 this->txtPartNumber1->Text = itmSelectedPart->Text;
    		 this->txtPartName1->Text   = itmSelectedPart->SubItems->Item[1]->Text;
    		 this->txtUnitPrice1->Text  = itmSelectedPart->SubItems->Item[2]->Text;
    		 this->txtQuantity1->Text   = S"1";
    		 this->txtSubTotal1->Text   = itmSelectedPart->SubItems->Item[2]->Text;
    		 this->chkKeepRemove1->Enabled = true;
    		 this->chkKeepRemove1->Checked = true;
    		 this->txtQuantity1->Focus();
    	 }
    	 else if( this->txtPartNumber2->Text->Equals(S"") )
    	 {
    		 this->txtPartNumber2->Text = itmSelectedPart->Text;
    		 this->txtPartName2->Text   = itmSelectedPart->SubItems->Item[1]->Text;
    		 this->txtUnitPrice2->Text  = itmSelectedPart->SubItems->Item[2]->Text;
    		 this->txtQuantity2->Text   = S"1";
    		 this->txtSubTotal2->Text   = itmSelectedPart->SubItems->Item[2]->Text;
    		 this->chkKeepRemove2->Enabled = true;
    		 this->chkKeepRemove2->Checked = true;
    		 this->txtQuantity2->Focus();
    	 }
    	 else if( this->txtPartNumber3->Text->Equals(S"") )
    	 {
    		 this->txtPartNumber3->Text = itmSelectedPart->Text;
    		 this->txtPartName3->Text   = itmSelectedPart->SubItems->Item[1]->Text;
    		 this->txtUnitPrice3->Text  = itmSelectedPart->SubItems->Item[2]->Text;
    		 this->txtQuantity3->Text   = S"1";
    		 this->txtSubTotal3->Text   = itmSelectedPart->SubItems->Item[2]->Text;
    		 this->chkKeepRemove3->Enabled = true;
    		 this->chkKeepRemove3->Checked = true;
    		 this->txtQuantity3->Focus();
    	 }
    	 else if( this->txtPartNumber4->Text->Equals(S"") )
    	 {
    		 this->txtPartNumber4->Text = itmSelectedPart->Text;
    		 this->txtPartName4->Text   = itmSelectedPart->SubItems->Item[1]->Text;
    		 this->txtUnitPrice4->Text  = itmSelectedPart->SubItems->Item[2]->Text;
    		 this->txtQuantity4->Text   = S"1";
    		 this->txtSubTotal4->Text   = itmSelectedPart->SubItems->Item[2]->Text;
    		 this->chkKeepRemove4->Enabled = true;
    		 this->chkKeepRemove4->Checked = true;
    		 this->txtQuantity4->Focus();
    	 }
    	 else if( this->txtPartNumber5->Text->Equals(S"") )
    	 {
    		 this->txtPartNumber5->Text = itmSelectedPart->Text;
    		 this->txtPartName5->Text   = itmSelectedPart->SubItems->Item[1]->Text;
    		 this->txtUnitPrice5->Text  = itmSelectedPart->SubItems->Item[2]->Text;
    		 this->txtQuantity5->Text   = S"1";
    		 this->txtSubTotal5->Text   = itmSelectedPart->SubItems->Item[2]->Text;
    		 this->chkKeepRemove5->Enabled = true;
    		 this->chkKeepRemove5->Checked = true;
    		 this->txtQuantity5->Focus();
    	 }
    	 else if( this->txtPartNumber6->Text->Equals(S"") )
    	 {
    		 this->txtPartNumber6->Text = itmSelectedPart->Text;
    		 this->txtPartName6->Text   = itmSelectedPart->SubItems->Item[1]->Text;
    		 this->txtUnitPrice6->Text  = itmSelectedPart->SubItems->Item[2]->Text;
    		 this->txtQuantity6->Text   = S"1";
    		 this->txtSubTotal6->Text   = itmSelectedPart->SubItems->Item[2]->Text;
    		 this->chkKeepRemove6->Enabled = true;
    		 this->chkKeepRemove6->Checked = true;
    		 this->txtQuantity6->Focus();
    	 }
    	 else
    		 return;
    		
    	// Calculate the current total order and update the order
    	CalculateTotalOrder();
    }
  18. Display the Order Processing form and click the first text box under Qty
  19. In the Properties window and in the Events section, double-click the Leave field
  20. Return to the form, click each of the other Qty text boxes, and in the Properties window, click the Leave field of each Qty
  21. Implement their events as follows:
     
    System::Void txtQuantity1_Leave(System::Object *  sender, System::EventArgs *  e)
    {
    	 int qty;
    	double unitPrice, subTotal;
    	
    	try {
    		// Get the quantity of the current item
    		qty = this->txtQuantity1->Text->ToInt16(0);
    	}
    	catch(FormatException *)
    	{
    		MessageBox::Show(S"The value you provided for the quantity of the item is invalid"
    				S"\nPlease try again");
    	}
    			
    	try {
    		// Get the unit price of the current item
    		unitPrice = this->txtUnitPrice1->Text->ToDouble(0);
    	}
    	catch(FormatException *)
    	{
    		MessageBox::Show(S"The unit price you provided for item is invalid"
    				S"\nPlease try again");
    	}
    	// Calculate the current sub total
    	subTotal = qty * unitPrice;
    
    	// Display the new sub total in the corresponding text box
    	this->txtSubTotal1->Text = subTotal.ToString(S"F");
    	// Update the order
    	CalculateTotalOrder();
    }
    
    private: System::Void txtQuantity2_Leave(System::Object *  sender, System::EventArgs *  e)
    {
    	int qty;
    	double unitPrice, subTotal;
    			
    	try {
    		qty = this->txtQuantity2->Text->ToInt16(0);
    	}
    	catch(FormatException *)
    	{
    		MessageBox::Show(S"The value you provided for the quantity of the item is invalid"
    				S"\nPlease try again");
    	}
    			
    	try {
    		unitPrice = this->txtUnitPrice2->Text->ToDouble(0);
    	}
    	catch(FormatException *)
    	{
    		MessageBox::Show(S"The unit price you provided for item is invalid"
    				S"\nPlease try again");
    	}
    	subTotal = qty * unitPrice;
    
    	this->txtSubTotal2->Text = subTotal.ToString(S"F");
    	CalculateTotalOrder();
    }
    
    private: System::Void txtQuantity3_Leave(System::Object *  sender, System::EventArgs *  e)
    {
    	int qty;
    	double unitPrice, subTotal;
    			
    	try {	
    		qty = this->txtQuantity3->Text->ToInt16(0);
    	}
    	catch(FormatException *)
    	{
    		MessageBox::Show(S"The value you provided for the quantity of the item is invalid"
    						 S"\nPlease try again");
    	}
    			
    	try {
    		unitPrice = this->txtUnitPrice3->Text->ToDouble(0);
    	}
    	catch(FormatException *)
    	{
    		MessageBox::Show(S"The unit price you provided for item is invalid"
    				S"\nPlease try again");
    	}
    	subTotal = qty * unitPrice;
    
    	this->txtSubTotal3->Text = subTotal.ToString(S"F");
    	CalculateTotalOrder();
    }
    
    private: System::Void txtQuantity4_Leave(System::Object *  sender, System::EventArgs *  e)
    {
    	int qty;
    	double unitPrice, subTotal;
    			
    	try {			
    		qty = this->txtQuantity4->Text->ToInt16(0);
    	}
    	catch(FormatException *)
    	{
    		MessageBox::Show(S"The value you provided for the quantity of the item is invalid"
    				S"\nPlease try again");
    	}
    			
    	try {
    		unitPrice = this->txtUnitPrice4->Text->ToDouble(0);
    	}
    	catch(FormatException *)
    	{
    		MessageBox::Show(S"The unit price you provided for item is invalid"
    				S"\nPlease try again");
    	}
    	subTotal = qty * unitPrice;
    
    	this->txtSubTotal4->Text = subTotal.ToString(S"F");
    	CalculateTotalOrder();
    }
    
    private: System::Void txtQuantity5_Leave(System::Object *  sender, System::EventArgs *  e)
    {
    	int qty;
    	double unitPrice, subTotal;
    			
    	try {	
    		qty = this->txtQuantity5->Text->ToInt16(0);
    	}
    	catch(FormatException *)
    	{
    		MessageBox::Show(S"The value you provided for the quantity of the item is invalid"
    				S"\nPlease try again");
    	}
    			
    	try {
    		unitPrice = this->txtUnitPrice5->Text->ToDouble(0);
    	}
    	catch(FormatException *)
    	{
    		MessageBox::Show(S"The unit price you provided for item is invalid"
    				S"\nPlease try again");
    	}
    	subTotal = qty * unitPrice;
    
    	this->txtSubTotal5->Text = subTotal.ToString(S"F");
    	CalculateTotalOrder();
    }
    
    private: System::Void txtQuantity6_Leave(System::Object *  sender, System::EventArgs *  e)
    {
    	int qty;
    	double unitPrice, subTotal;
    			
    	try {	
    		qty = this->txtQuantity6->Text->ToInt16(0);
    	}
    	catch(FormatException *)
    	{
    		MessageBox::Show(S"The value you provided for the quantity of the item is invalid"
    				S"\nPlease try again");
    	}
    			
    	try {
    		unitPrice = this->txtUnitPrice6->Text->ToDouble(0);
    	}
    	catch(FormatException *)
    	{
    		MessageBox::Show(S"The unit price you provided for item is invalid"
    				S"\nPlease try again");
    	}
    	subTotal = qty * unitPrice;
    
    	this->txtSubTotal6->Text = subTotal.ToString(S"F");
    	CalculateTotalOrder();
    }
  22. Display the Order Processing form and double-click the most top check box
  23. Return to the form and double-click each of the other check boxes
  24. Implement their events as follows:
     
    System::Void chkKeepRemove1_CheckedChanged(System::Object *  sender, System::EventArgs *  e)
    {
    	// If the check box was unchecked
    	if( this->chkKeepRemove1->Checked == false ) 
    	{
    		// Reset the controls of the current item
    		this->txtPartNumber1->Text      = S"";
    		this->txtPartName1->Text = S"";
    		this->txtUnitPrice1->Text   = S"";
    		this->txtQuantity1->Text    = S"0";
    		this->txtSubTotal1->Text    = S"0.00";
    		this->chkKeepRemove1->Checked     = false;
    		this->chkKeepRemove1->Enabled     = false;
    		// Re-calculate the total order to update it
    		CalculateTotalOrder();
    	}
    }
    
    private: System::Void chkKeepRemove2_CheckedChanged(System::Object *  sender, System::EventArgs *  e)
    {
    	// If the check box was unchecked
    	if( this->chkKeepRemove2->Checked == false ) 
    	{
    		// Reset the controls of the current item
    		this->txtPartNumber2->Text      = S"";
    		this->txtPartName2->Text = S"";
    		this->txtUnitPrice2->Text   = S"";
    		this->txtQuantity2->Text    = S"0";
    		this->txtSubTotal2->Text    = S"0.00";
    		this->chkKeepRemove2->Checked     = false;
    		this->chkKeepRemove2->Enabled     = false;
    		// Re-calculate the total order to update it
    		CalculateTotalOrder();
    	}
    }
    
    private: System::Void chkKeepRemove3_CheckedChanged(System::Object *  sender, System::EventArgs *  e)
    {
    	// If the check box was unchecked
    	if( this->chkKeepRemove3->Checked == false ) 
    	{
    		// Reset the controls of the current item
    		this->txtPartNumber3->Text      = S"";
    		this->txtPartName3->Text = S"";
    		this->txtUnitPrice3->Text   = S"";
    		this->txtQuantity3->Text    = S"0";
    		this->txtSubTotal3->Text    = S"0.00";
    		this->chkKeepRemove3->Checked     = false;
    		this->chkKeepRemove3->Enabled     = false;
    		// Re-calculate the total order to update it
    		CalculateTotalOrder();
    	}
    }
    
    private: System::Void chkKeepRemove4_CheckedChanged(System::Object *  sender, System::EventArgs *  e)
    {
    	// If the check box was unchecked
    	if( this->chkKeepRemove4->Checked == false ) 
    	{
    		// Reset the controls of the current item
    		this->txtPartNumber4->Text      = S"";
    		this->txtPartName4->Text = S"";
    		this->txtUnitPrice4->Text   = S"";
    		this->txtQuantity4->Text    = S"0";
    		this->txtSubTotal4->Text    = S"0.00";
    		this->chkKeepRemove4->Checked     = false;
    		this->chkKeepRemove4->Enabled     = false;
    		// Re-calculate the total order to update it
    		CalculateTotalOrder();
    	}
    }
    
    private: System::Void chkKeepRemove5_CheckedChanged(System::Object *  sender, System::EventArgs *  e)
    {
    	// If the check box was unchecked
    	if( this->chkKeepRemove5->Checked == false ) 
    	{
    		// Reset the controls of the current item
    		this->txtPartNumber5->Text      = S"";
    		this->txtPartName5->Text = S"";
    		this->txtUnitPrice5->Text   = S"";
    		this->txtQuantity5->Text    = S"0";
    		this->txtSubTotal5->Text    = S"0.00";
    		this->chkKeepRemove5->Checked     = false;
    		this->chkKeepRemove5->Enabled     = false;
    		// Re-calculate the total order to update it
    		CalculateTotalOrder();
    	}
    }
    
    private: System::Void chkKeepRemove6_CheckedChanged(System::Object *  sender, System::EventArgs *  e)
    {
    	// If the check box was unchecked
    	if( this->chkKeepRemove6->Checked == false ) 
    	{
    		// Reset the controls of the current item
    		this->txtPartNumber6->Text      = S"";
    		this->txtPartName6->Text = S"";
    		this->txtUnitPrice6->Text   = S"";
    		this->txtQuantity6->Text    = S"0";
    		this->txtSubTotal6->Text    = S"0.00";
    		this->chkKeepRemove6->Checked     = false;
    		this->chkKeepRemove6->Enabled     = false;
    		// Re-calculate the total order to update it
    		CalculateTotalOrder();
    	}
    }
  25. Execute the application to test it
 

Previous Copyright © 2004-2016, FunctionX, Inc. Next