Home

XML-Based Applications:
Georgetown Cleaning Services

 

Introduction to Serialization

XML has become a platform of choice to create data-based applications. For example, if may employees are working on the same application they share, you can create a common form they would use to create their work orders and save them to a common repository. You can make this possible for almost any type of application. We will apply this concept to our Georgetown Cleaning Services, which is an application used by a dry cleaning store.

In this application, a form will be presented to the user who, after processing an order, will click the Save button. The order will be saved to a common file. Eventually, all orders would be saved there and a user will be able to review all orders from that common file.

Practical Learning Practical Learning: Introducing File-Based Databases

  1. Start a new Windows Forms Application named GCS4
  2. In the Solution Explorer, right-click Form1.cs and click Rename
  3. Change the name to OrderProcessing.cs
  4. In the Properties window, change the (Name) of the form to OrderProcessing
  5. Right-click the form and click View Code
  6. Change the name of the form in the Main() method to OrderProcessing
     
    [STAThread]
    static void Main() 
    {
    	Application.Run(new OrderProcessing());
    }
  7. Design the form 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 dd MMM yyyy
    Label Label   Time Left:  
    DateTimePicker DateTimePicker dtpTimeLeft   Format: Time
    Label Label   Date Expected:  
    DateTimePicker DateTimePicker dtpDateExpected   Format: Custom
    Custom Format: dddd dd MMM 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 1.25 TextAlign: Right
    TextBox TextBox txtShirtsQuantity 0 TextAlign: Right
    TextBox TextBox txtShirtsSubTotal 0.00 TextAlign: Right
    Label Label   Pants  
    TextBox TextBox txtPantsUnitPrice 1.95 TextAlign: Right
    TextBox TextBox txtPantsQuantity   TextAlign: Right
    TextBox TextBox txtPantsSubTotal 0.00 TextAlign: Right
    ComboBox ComboBox cboItem1 None  
    TextBox TextBox txtItem1UnitPrice 0.00 TextAlign: Right
    TextBox TextBox txtItem1Quantity 0 TextAlign: Right
    TextBox TextBox txtItem1SubTotal 0.00 TextAlign: Right
    ComboBox ComboBox cboItem2 None  
    TextBox TextBox txtItem2UnitPrice 0.00 TextAlign: Right
    TextBox TextBox txtItem2Quantity 0 TextAlign: Right
    TextBox TextBox txtItem2SubTotal 0.00 TextAlign: Right
    ComboBox ComboBox cboItem3 None  
    TextBox TextBox txtItem3UnitPrice 0.00 TextAlign: Right
    TextBox TextBox txtItem3Quantity 0 TextAlign: Right
    TextBox TextBox txtItem3SubTotal 0.00 TextAlign: Right
    ComboBox ComboBox cboItem4 None  
    TextBox TextBox txtItem4UnitPrice 0.00 TextAlign: Right
    TextBox TextBox txtItem4Quantity 0 TextAlign: Right
    TextBox TextBox txtItem4SubTotal 0.00 TextAlign: Right
    GroupBox GroupBox   Order Summary  
    Label Label   Cleaning Total:  
    TextBox TextBox txtCleaningTotal 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   Net Total:  
    TextBox TextBox txtNetPrice 0.00 TextAlign: Right
    Button Button btnClose Close  
    GroupBox     Maintenance  
    Button Button btnSave Save  
    Button Button btnReset Reset  
    Label Label   Receipt #:  
    TextBox TextBox txtReceiptNumber 1  
    Button Button btnOpen Open  
  8. Click each combo box. Access its Items property and fill it up as follows:
     
    Women Suit
    Dress
    Regular Skirt
    Skirt With Hook
    Men's Suit 2Pc
    Men's Suit 3Pc
    Sweaters
    Silk Shirt
    Tie
    Coat
    Jacket
    Swede
  9. Click OK and save All
  10. On the form, double-click the Time Left control and 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);
    	}
    }
  11. In the Class View, expand GCS4 followed by GCS4, followed by OrderProcessing
  12. Right-click OrderProcessing -> Add -> Add Method...
  13. Set the Method Access to internal
  14. Accept the Return Type as void and set the Method Name to CalculateTotal
  15. Press Enter and implement the method as follows:
     
    internal void CalculateTotal()
    {
    decimal unitPriceShirts = 0.00M, unitPricePants = 0.00M, unitPriceItem1 = 0.00M,
    	unitPriceItem2 = 0.00M, unitPriceItem3 = 0.00M, unitPriceItem4 = 0.00M;
    decimal subTotalShirts = 0.00M, subTotalPants = 0.00M, subTotalItem1 = 0.00M,
    		subTotalItem2 = 0.00M, subTotalItem3 = 0.00M, subTotalItem4 = 0.00M;
    	int    qtyShirts = 1, qtyPants = 1, qtyItem1 = 1,
    		qtyItem2 = 1, qtyItem3 = 1, qtyItem4 = 4;
    decimal cleaningTotal = 0.00M, taxRate = 0.00M, taxAmount = 0.00M, netPrice = 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");
    	}
    	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");
    	}
    
    	try 
    	{
    		unitPriceItem1 = decimal.Parse(this.txtItem1UnitPrice.Text);
    	}
    	catch(FormatException )
    	{
    	MessageBox.Show("The value you entered for the price is not valid" +
    				"\nPlease try again");
    	}
    	try 
    	{
    		qtyItem1  = int.Parse(this.txtItem1Quantity.Text);
    	}
    	catch(FormatException )
    	{
    		MessageBox.Show("The value you entered is not valid" +
    				"\nPlease try again");
    	}
    
    	try 
    	{
    		unitPriceItem2 = decimal.Parse(this.txtItem2UnitPrice.Text);
    	}
    	catch(FormatException )
    	{
    		MessageBox.Show("The value you entered for the price is not valid" +
    				"\nPlease try again");
    	}
    	try 
    	{
    		qtyItem2  = int.Parse(this.txtItem2Quantity.Text);
    	}
    	catch(FormatException )
    	{
    		MessageBox.Show("The value you entered is not valid" +
    				"\nPlease try again");
    	}
    
    	try 
    	{
    		unitPriceItem3 = decimal.Parse(this.txtItem3UnitPrice.Text);
    	}
    	catch(FormatException )
    	{
    		MessageBox.Show("The value you entered for the price is not valid" +
    				"\nPlease try again");
    	}
    	try 
    	{
    		qtyItem3  = int.Parse(this.txtItem3Quantity.Text);
    	}
    	catch(FormatException )
    	{
    		MessageBox.Show("The value you entered is not valid" +
    				"\nPlease try again");
    	}
    
    	try 
    	{
    		unitPriceItem4 = decimal.Parse(this.txtItem4UnitPrice.Text);
    	}
    	catch(FormatException )
    	{
    		MessageBox.Show("The value you entered for the price is not valid" +
    				"\nPlease try again");
    	}
    	try 
    	{
    		qtyItem4  = int.Parse(this.txtItem4Quantity.Text);
    	}
    	catch(FormatException )
    	{
    		MessageBox.Show("The value you entered is not valid" +
    				"\nPlease try again");
    	}
    
    	// Calculate the sub-total for this item
    	subTotalShirts  = qtyShirts * unitPriceShirts;
    	subTotalPants  = qtyPants * unitPricePants;
    	subTotalItem1  = qtyItem1 * unitPriceItem1;
    	subTotalItem2  = qtyItem2 * unitPriceItem2;
    	subTotalItem3  = qtyItem3 * unitPriceItem3;
    	subTotalItem4  = qtyItem4 * unitPriceItem4;
    
    	// Calculate the total based on sub-totals
    	cleaningTotal = subTotalShirts + subTotalPants + subTotalItem1 +
    			subTotalItem2 + subTotalItem3 + subTotalItem4;
    
    	taxRate = decimal.Parse(this.txtTaxRate.Text);
    	// Calculate the amount owed for the taxes
    	taxAmount = cleaningTotal * taxRate / 100;
    	// Add the tax amount to the total order
    	netPrice  = cleaningTotal + taxAmount;
    
    	// Display the sub-total in the corresponding text box
    	this.txtShirtsSubTotal.Text = subTotalShirts.ToString("F");
    	this.txtPantsSubTotal.Text = subTotalPants.ToString("F");
    	this.txtItem1SubTotal.Text = subTotalItem1.ToString("F");
    	this.txtItem2SubTotal.Text = subTotalItem2.ToString("F");
    	this.txtItem3SubTotal.Text = subTotalItem3.ToString("F");
    	this.txtItem4SubTotal.Text = subTotalItem4.ToString("F");
    
    	this.txtCleaningTotal.Text = cleaningTotal.ToString("F");
    	this.txtTaxAmount.Text = taxAmount.ToString("F");
    	this.txtNetPrice.Text = netPrice.ToString("F");		
    }
  16. Return to the form and click the quantity text box that corresponds to the Shirts
  17. In the Properties window, click the Events button and double-click the Leave field
  18. Implement the event as follows:
     
    private void txtShirtsQuantity_Leave(object sender, System.EventArgs e)
    {
    	CalculateTotal();
    }
  19. Return to the form and click the quantity text box that corresponds to the Pants
  20. In the Events section of the Properties window, double-click the Leave field and implement the event as follows:
     
    private void txtPantsQuantity_Leave(object sender, System.EventArgs e)
    {
    	CalculateTotal();
    }
  21. Return to the form and click the quantity text box that corresponds to the first combo box
  22. In the Events section of the Properties window, double-click the Leave field, and implement the event as follows:
     
    private void txtItem1Quantity_Leave(object sender, System.EventArgs e)
    {
    	if( this.cboItem1.Text != "None" )
    		CalculateTotal();
    	else
    		MessageBox.Show("Make sure you select an item in the combo box");
    }
  23. Return to the form and click the quantity text box that corresponds to the second combo box
  24. In the Events section of the Properties window, double-click the Leave field and implement the event as follows:
     
    private void txtItem2Quantity_Leave(object sender, System.EventArgs e)
    {
    	if( this.cboItem2.Text != "None" )
    		CalculateTotal();
    	else
    		MessageBox.Show("Make sure you select an item in the combo box");
    }
  25. Return to the form and click the quantity text box that corresponds to the third combo box
  26. In the Events section of the Properties window, double-click the Leave field and implement the event as follows:
     
    private void txtItem3Quantity_Leave(object sender, System.EventArgs e)
    {
    	if( this.cboItem3.Text != "None" )
    		CalculateTotal();
    	else
    		MessageBox.Show("Make sure you select an item in the combo box");
    }
  27. Return to the form and click the quantity text box that corresponds to the fourth combo box
  28. In the Events section of the Properties window, double-click the Leave field, and implement the event as follows:
     
    private void txtItem4Quantity_Leave(object sender, System.EventArgs e)
    {
    	if( this.cboItem4.Text != "None" )
    		CalculateTotal();
    	else
    		MessageBox.Show("Make sure you select an item in the combo box");
    }
  29. Return to the form and click the Tax Rate text box
  30. In the Events section of the Properties window, double-click the Leave field and implement the event as follows:
     
    private void txtTaxRate_Leave(object sender, System.EventArgs e)
    {
    	CalculateTotal();
    }
  31. Double-click the Close button and implement its Click event as follows:
     
    private void btnClose_Click(object sender, System.EventArgs e)
    {
    	Close();
    }
  32. Return to the form.
    Double-click the Reset button and implement its event as follows:
     
    private void btnReset_Click(object sender, System.EventArgs e)
    {
    	// Reset the controls
    	this.txtCustomerName.Text = "";
    	this.txtCustomerPhone.Text = "";
    	this.txtShirtsUnitPrice.Text = "1.25";
    	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.Text = "None";
    	this.txtItem1UnitPrice.Text = "0.00";
    	this.txtItem1Quantity.Text = "0";
    	this.txtItem1SubTotal.Text = "0.00";
    	this.cboItem2.Text = "None";
    	this.txtItem2UnitPrice.Text = "0.00";
    	this.txtItem2Quantity.Text = "0";
    	this.txtItem2SubTotal.Text = "0.00";
    	this.cboItem3.Text = "None";
    	this.txtItem3UnitPrice.Text = "0.00";
    	this.txtItem3Quantity.Text = "0";
    	this.txtItem3SubTotal.Text = "0.00";
    	this.cboItem4.Text = "None";
    	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.txtNetPrice.Text = "0.00";
    	this.txtCustomerName.Focus();
    }
  33. In the top section of the file, under the other using lines, type:
     
    using System.IO;
    using System.Xml;
    using System.Globalization;
  34. Return to the form and double-click the Save button
  35. Implement the event as follows:
     
    private void btnSave_Click(object sender, System.EventArgs e)
    {
    	// This is the name of the file that holds or will hold the cleaning orders
    	 string strFilename = "CleaningOrders.xml";
    	 XmlDocument xmlDoc = new XmlDocument();
    
    	 // Find out if the file exists already
    	 // If it doesn't, then create it
    	 if( !File.Exists(strFilename) )
    	 {
    		 xmlDoc.LoadXml("<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
    				 "<CleaningOrders></CleaningOrders>");
    		 xmlDoc.Save(strFilename);
    	 }
    
    	 // Open the XML file
    	 xmlDoc.Load(strFilename);
    
    	 // The count variable will allow us to either create 
    	 // a receipt number or increment the current receipt number
    	 int count = 1;
    	 // Locate the CleaningOrder element that holds an individual entry
    	 XmlNodeList lstOrders = xmlDoc.GetElementsByTagName("CleaningOrder");
    
    	 // If a cleaning order exists already, then increment its number
    	 // Warning: this code assumes that the cleaning orders are not deleted
    	 if( lstOrders.Count > 0 )
    		 count = lstOrders.Count + 1;
    
    	 // Create a cleaning order element
    	 XmlElement elmXML = xmlDoc.CreateElement("CleaningOrder");
    	 // Add a receipt number as an attribute of the order
    	 elmXML.SetAttribute("ReceiptNumber", count.ToString());
    	 // Create the child elements of a cleaning order
    string strNewCleaning = "<CustomerName>" + this.txtCustomerName.Text + "</CustomerName>" +
    		 "<CustomerPhone>" + this.txtCustomerPhone.Text + "</CustomerPhone>" +
    		 "<DateLeft>" +
    		 this.dtpDateLeft.Value.ToString() + "</DateLeft>" + "<TimeLeft>" +
    		 this.dtpTimeLeft.Value.ToString() + "</TimeLeft>" + "<DateExpected>" +
    	 this.dtpDateExpected.Value.ToString() + "</DateExpected>" + "<TimeExpected>" +
    	this.dtpTimeExpected.Value.ToString() + "</TimeExpected>" +
    	"<ShirtsUnitPrice>" + this.txtShirtsUnitPrice.Text + "</ShirtsUnitPrice>" +
    		 "<ShirtsQuantity>" + this.txtShirtsUnitPrice.Text + "</ShirtsQuantity>" +
    		 "<ShirtsSubTotal>" + this.txtShirtsSubTotal.Text + "</ShirtsSubTotal>" +
    		 "<PantsUnitPrice>" + this.txtShirtsUnitPrice.Text + "</PantsUnitPrice>" +
    		 "<PantsQuantity>" + this.txtPantsQuantity.Text + "</PantsQuantity>" +
    		 "<PantsSubTotal>" + this.txtPantsSubTotal.Text + "</PantsSubTotal>" +
    		 "<Item1>" + this.cboItem1.Text + "</Item1>" +
    		 "<Item1UnitPrice>" + this.txtItem1UnitPrice.Text + "</Item1UnitPrice>" +
    		 "<Item1Quantity>" + this.txtItem1Quantity.Text + "</Item1Quantity>" +
    		 "<Item1SubTotal>" + this.txtItem1SubTotal.Text + "</Item1SubTotal>" +
    		 "<Item2>" + this.cboItem2.Text + "</Item2>" +
    		 "<Item2UnitPrice>" + this.txtItem2UnitPrice.Text + "</Item2UnitPrice>" +
    		 "<Item2Quantity>" + this.txtItem2Quantity.Text + "</Item2Quantity>" +
    		 "<Item2SubTotal>" + this.txtItem2SubTotal.Text + "</Item2SubTotal>" +
    		 "<Item3>" + this.cboItem3.Text + "</Item3>" +
    		 "<Item3UnitPrice>" + this.txtItem3UnitPrice.Text + "</Item3UnitPrice>" +
    		 "<Item3Quantity>" + this.txtItem3Quantity.Text + "</Item3Quantity>" +
    		 "<Item3SubTotal>" + this.txtItem3SubTotal.Text + "</Item3SubTotal>" +
    		 "<Item4>" + this.cboItem4.Text + "</Item4>" +
    		 "<Item4UnitPrice>" + this.txtItem4UnitPrice.Text + "</Item4UnitPrice>" +
    		 "<Item4Quantity>" + this.txtItem4Quantity.Text + "</Item4Quantity>" +
    		 "<Item4SubTotal>" + this.txtItem4SubTotal.Text + "</Item4SubTotal>" +
    		 "<CleaningTotal>" + this.txtCleaningTotal.Text + "</CleaningTotal>" +
    		 "<TaxRate>" + this.txtTaxRate.Text + "</TaxRate>" +
    		 "<TaxAmount>" + this.txtTaxAmount.Text + "</TaxAmount>" +
    		 "<NetPrice>" + this.txtNetPrice.Text + "</NetPrice>";
    
    	 elmXML.InnerXml = strNewCleaning;
    	 // Add the new cleaning order to the file
    	 xmlDoc.DocumentElement.AppendChild(elmXML);
    
    	 // Save the file
    	 xmlDoc.Save(strFilename);
    	 // In case the user will add a new cleaning order,
    	 // increment the receipt number
    	 count++;
    
    	 // Reset the form in case the user wants 
    	 // to add a new cleaning order
    	 this.btnReset_Click(sender, e);
    		}
    	}
  36. Return to the form.
    Execute the application
  37. Process a few orders and save each
     
  38. Close the forms and return to your programming environment
  39. On the form, double-click the Open button and implement its Click events as follows:
     
    private void btnOpen_Click(object sender, System.EventArgs e)
    {
    	string strFilename = "CleaningOrders.xml";
    	XmlDocument xmlDoc = new XmlDocument();
    
    	// If the XML file cannot be found, let the user know and give up
    	if( !File.Exists(strFilename) )
    	{
    		MessageBox.Show("No cleaning order exists or the file cannot be found");
    		return;
    	}
    
    	// In case the file exists, open it
    	xmlDoc.Load(strFilename);
    
    	// Get a list of the elements whose values are CleaningOrder
    	XmlNodeList lstOrders = xmlDoc.GetElementsByTagName("CleaningOrder");
    
    	// Check each cleaning order
    	for(int i = 0; i < lstOrders.Count; i++)
    	{
    		// If you find a cleaning order with the receipt number
    if( lstOrders[i].Attributes["ReceiptNumber"].Value.Equals(this.txtReceiptNumber.Text) )
    		{
    	// Once you find that cleaning order, get the value of each node and display
    			// them in the form
    		this.txtCustomerName.Text = lstOrders[i]["CustomerName"].InnerText;
    		this.txtCustomerPhone.Text = lstOrders[i]["CustomerPhone"].InnerText;
    	this.dtpDateLeft.Value = DateTime.Parse(lstOrders[i]["DateLeft"].InnerText);
    	this.dtpTimeLeft.Value = DateTime.Parse(lstOrders[i]["TimeLeft"].InnerText);
    this.dtpDateExpected.Value = DateTime.Parse(lstOrders[i]["DateExpected"].InnerText);
    this.dtpTimeExpected.Value = DateTime.Parse(lstOrders[i]["TimeExpected"].InnerText);
    	this.txtShirtsUnitPrice.Text = lstOrders[i]["ShirtsUnitPrice"].InnerText;
    	this.txtShirtsQuantity.Text = lstOrders[i]["ShirtsQuantity"].InnerText;
    	this.txtShirtsSubTotal.Text = lstOrders[i]["ShirtsSubTotal"].InnerText;
    	this.txtPantsUnitPrice.Text = lstOrders[i]["PantsUnitPrice"].InnerText;
    	this.txtPantsQuantity.Text = lstOrders[i]["PantsQuantity"].InnerText;
    	this.txtPantsSubTotal.Text = lstOrders[i]["PantsSubTotal"].InnerText;
    	this.cboItem1.Text = lstOrders[i]["Item1"].InnerText;
    	this.txtItem1UnitPrice.Text = lstOrders[i]["Item1UnitPrice"].InnerText;
    	this.txtItem1Quantity.Text = lstOrders[i]["Item1Quantity"].InnerText;
    	this.txtItem1SubTotal.Text = lstOrders[i]["Item1SubTotal"].InnerText;
    	this.cboItem2.Text = lstOrders[i]["Item2"].InnerText;
    	this.txtItem2UnitPrice.Text = lstOrders[i]["Item2UnitPrice"].InnerText;
    	this.txtItem2Quantity.Text = lstOrders[i]["Item2Quantity"].InnerText;
    	this.txtItem2SubTotal.Text = lstOrders[i]["Item2SubTotal"].InnerText;
    	this.cboItem3.Text = lstOrders[i]["Item3"].InnerText;
    	this.txtItem3UnitPrice.Text = lstOrders[i]["Item3UnitPrice"].InnerText;
    	this.txtItem3Quantity.Text = lstOrders[i]["Item3Quantity"].InnerText;
    	this.txtItem3SubTotal.Text = lstOrders[i]["Item3SubTotal"].InnerText;
    	this.cboItem4.Text = lstOrders[i]["Item4"].InnerText;
    	this.txtItem4UnitPrice.Text = lstOrders[i]["Item4UnitPrice"].InnerText;
    	this.txtItem4Quantity.Text = lstOrders[i]["Item4Quantity"].InnerText;
    	this.txtItem4SubTotal.Text = lstOrders[i]["Item4SubTotal"].InnerText;
    	this.txtCleaningTotal.Text = lstOrders[i]["CleaningTotal"].InnerText;
    	this.txtTaxRate.Text = lstOrders[i]["TaxRate"].InnerText;
    	this.txtTaxAmount.Text = lstOrders[i]["TaxAmount"].InnerText;
    	this.txtNetPrice.Text = lstOrders[i]["NetPrice"].InnerText;
    		}
    	}
    }
  40. Execute the application
  41. Enter a number such as 1 or 2 in the Receipt # text box and click Open
 
 

Home Copyright © 2004-2011 FunctionX