Protected Sub btnGeneration_Click(sender As Object, e As EventArgs) Handles btnGeneration.Click

        Dim oEdiDoc As ediDocument = Nothing
        Dim oInterchange As ediInterchange = Nothing
        Dim oGroup As ediGroup = Nothing
        Dim oTransactionset As ediTransactionSet = Nothing
        Dim oSegment As ediDataSegment = Nothing
        Dim oSchemas As ediSchemas = Nothing
        Dim i As Short
        Dim sEdiString As String
        Dim dtRow As Data.DataRow

        Dim sEdiFile As String = Trim(Format(Now(), "yyMMddhhmmss")) & ".x12"
        Dim sPath As String = AppDomain.CurrentDomain.BaseDirectory

        'Instantiate oEdiDoc object
        ediDocument.Set(oEdiDoc, New ediDocument)

        'use CR/LF as segment terminator in EDI file
        oEdiDoc.SegmentTerminator = vbCrLf

        'change cursor type to forward write to use less memory and improve performance
        oEdiDoc.CursorType = DocumentCursorTypeConstants.Cursor_ForwardWrite

        'increase buffer so that hard drive does not become a 'bottle-neck'
        oEdiDoc.Property(DocumentPropertyIDConstants.Property_DocumentBufferIO) = 200

        ediSchemas.Set(oSchemas, oEdiDoc.GetSchemas)
        oSchemas.EnableStandardReference = False

        'load standard exchange format (SEF) file
        oEdiDoc.LoadSchema(sPath & "files\810_004010.SEF", SchemaTypeIDConstants.Schema_Standard_Exchange_Format)

        'Creating ISA segment. In this example, the values are fixed.
        ediInterchange.Set(oInterchange, oEdiDoc.CreateInterchange("X", "004010"))
        ediDataSegment.Set(oSegment, oInterchange.GetDataSegmentHeader)
        oSegment.DataElementValue(1) = "00"   ' Authorization Information Qualifier (I01) 
        'oSegment.DataElementValue(2) = ""   ' Authorization Information (I02) 
        oSegment.DataElementValue(3) = "00"   ' Security Information Qualifier (I03) 
        'oSegment.DataElementValue(4) = ""   ' Security Information (I04) 
        oSegment.DataElementValue(5) = "ZZ"   ' Interchange ID Qualifier (I05) 
        oSegment.DataElementValue(6) = "SENDER ID"   ' Interchange Sender ID (I06) 
        oSegment.DataElementValue(7) = "ZZ"   ' Interchange ID Qualifier (I05) 
        oSegment.DataElementValue(8) = "RECEIVER ID"   ' Interchange Receiver ID (I07) 
        oSegment.DataElementValue(9) = "010101"   ' Interchange Date (I08) 
        oSegment.DataElementValue(10) = "0101"   ' Interchange Time (I09) 
        oSegment.DataElementValue(11) = "U"   ' Interchange Control Standards Identifier (I10) 
        oSegment.DataElementValue(12) = "00401"   ' Interchange Control Version Number (I11) 
        oSegment.DataElementValue(13) = "000000001"   ' Interchange Control Number (I12) 
        oSegment.DataElementValue(14) = "0"   ' Acknowledgment Requested (I13) 
        oSegment.DataElementValue(15) = "T"   ' Usage Indicator (I14) 
        oSegment.DataElementValue(16) = "!"   ' Component Element Separator (I15) 


        'Creating GS segment
        ediGroup.Set(oGroup, oInterchange.CreateGroup("004010"))
        ediDataSegment.Set(oSegment, oGroup.GetDataSegmentHeader)
        oSegment.DataElementValue(1) = "IN"   ' Functional Identifier Code (479) 
        oSegment.DataElementValue(2) = "SENDER ID"   ' Application Sender's Code (142) 
        oSegment.DataElementValue(3) = "APP RECEIVER"   ' Application Receiver's Code (124) 
        oSegment.DataElementValue(4) = "01010101"   ' Date (373) 
        oSegment.DataElementValue(5) = "01010101"   ' Time (337) 
        oSegment.DataElementValue(6) = "1"   ' Group Control Number (28) 
        oSegment.DataElementValue(7) = "X"   ' Responsible Agency Code (455) 
        oSegment.DataElementValue(8) = "004010"   ' Version / Release / Industry Identifier Code (480) 


        'Creating ST segment
        ediTransactionSet.Set(oTransactionset, oGroup.CreateTransactionSet("810"))
        ediDataSegment.Set(oSegment, oTransactionset.GetDataSegmentHeader)
        'oSegment.DataElementValue(1) = "810"   ' Transaction Set Identifier Code (143) 
        oSegment.DataElementValue(2) = "0001"   ' Transaction Set Control Number (329) 

        'Creating BIG segment
        ediDataSegment.Set(oSegment, oTransactionset.CreateDataSegment("BIG"))
        oSegment.DataElementValue(1) = "20021208"   ' Date (373)
        oSegment.DataElementValue(2) = "00001"      ' Invoice Number (76) 
        oSegment.DataElementValue(4) = "A999"       ' Purchase Order Number (324)

        'Creating N1 Loops
        'Ship To information
        'Creating the N1 data segment in the N1 loop (group)
        ediDataSegment.Set(oSegment, oTransactionset.CreateDataSegment("N1\N1"))
        oSegment.DataElementValue(1) = "ST"     ' Entity Identifier Code (98)
        oSegment.DataElementValue(2) = txtShipToCompany.Text    ' Name (93) 
        oSegment.DataElementValue(3) = "9"      ' Identification Code Qualifier (66) 
        oSegment.DataElementValue(4) = "122334455"      ' Identification Code (67) 

        'Creating the N3 data segment in the N1 loop 
        ediDataSegment.Set(oSegment, oTransactionset.CreateDataSegment("N1\N3"))
        oSegment.DataElementValue(1) = txtShipToAddr.Text   ' Address Information (166) 

        'Creating the N4 data segment in the N1 loop
        ediDataSegment.Set(oSegment, oTransactionset.CreateDataSegment("N1\N4"))
        oSegment.DataElementValue(1) = txtShipToCity.Text   ' City Name (19) 
        oSegment.DataElementValue(2) = txtShipToState.Text  ' State or Province Code (156) 
        oSegment.DataElementValue(3) = txtShipToZip.Text    ' Postal Code (116) 

        'Creating a second instance of the N1 loop 
        'Bill-to information
        'Creating the N1 data segment in the second instance of the N1 loop
        ediDataSegment.Set(oSegment, oTransactionset.CreateDataSegment("N1\N1"))
        oSegment.DataElementValue(1) = "BT"
        oSegment.DataElementValue(2) = txtBillToCompany.Text
        oSegment.DataElementValue(3) = "9"
        oSegment.DataElementValue(4) = "122334455"

        'Creating the N3 data segment in the second instance of the N1 loop
        ediDataSegment.Set(oSegment, oTransactionset.CreateDataSegment("N1\N3"))
        oSegment.DataElementValue(1) = txtBillToAddr.Text

        'Creating the N4 data segment in the second instance of the N1 loop
        ediDataSegment.Set(oSegment, oTransactionset.CreateDataSegment("N1\N4"))
        oSegment.DataElementValue(1) = txtBillToCity.Text
        oSegment.DataElementValue(2) = txtBillToState.Text
        oSegment.DataElementValue(3) = txtBillToZip.Text

        'Terms
        ediDataSegment.Set(oSegment, oTransactionset.CreateDataSegment("ITD"))
        oSegment.DataElementValue(1) = "01"     ' Terms Type Code (336) 
        oSegment.DataElementValue(2) = "3"      ' Terms Basis Date Code (333) 
        oSegment.DataElementValue(3) = "2"      ' Terms Discount Percent (338) 
        oSegment.DataElementValue(5) = "30"     ' Terms Discount Days Due (351) 
        oSegment.DataElementValue(7) = "30"     ' Terms Net Days (386) 
        oSegment.DataElementValue(12) = "60"    ' Description (352) 

        ediDataSegment.Set(oSegment, oTransactionset.CreateDataSegment("FOB"))
        oSegment.DataElementValue(1) = "PP"     ' Shipment Method of Payment (146) 

        'Creating the IT1 Loop
        For i = 1 To 2
            dtRow = dt.Rows(i - 1)
            'Creating the IT1 data segment in the IT1 loop
            ediDataSegment.Set(oSegment, oTransactionset.CreateDataSegment("IT1\IT1"))
            oSegment.DataElementValue(2) = dtRow("Qty")  ' Quantity Invoiced (358) 
            oSegment.DataElementValue(3) = dtRow("Unit")         ' Unit or Basis for Measurement Code (355) 
            oSegment.DataElementValue(4) = dtRow("Price")       ' Unit Price (212) 
            oSegment.DataElementValue(6) = "UA"         ' Product/Service ID Qualifier (235) 
            oSegment.DataElementValue(7) = "EAN"        ' Product/Service ID (234) 

            'Creating the PID data segment in the IT1\PID loop
            ediDataSegment.Set(oSegment, oTransactionset.CreateDataSegment("IT1\PID\PID"))
            oSegment.DataElementValue(1) = "F"      ' Item Description Type (349) 
            oSegment.DataElementValue(5) = dtRow("Desc")     ' Description (352) 

        Next

        'Creating the TDS segment
        ediDataSegment.Set(oSegment, oTransactionset.CreateDataSegment("TDS"))
        oSegment.DataElementValue(1) = 20 * 100

        'Creating the CAD segment
        ediDataSegment.Set(oSegment, oTransactionset.CreateDataSegment("CAD"))
        oSegment.DataElementValue(5) = "Routing"

        'Creating the ISS segment in Loop ISS, then populates its elements
        ediDataSegment.Set(oSegment, oTransactionset.CreateDataSegment("ISS\ISS"))
        oSegment.DataElementValue(1) = "30"
        oSegment.DataElementValue(2) = "CA"

        'Creating the CTT segment
        ediDataSegment.Set(oSegment, oTransactionset.CreateDataSegment("CTT"))
        oSegment.DataElementValue(1) = 50

        'EDI file can be saved to a file
        oEdiDoc.Save(sPath & "edi\" & sEdiFile)

        'gets the EDI file as a string
        sEdiString = oEdiDoc.GetEdiString(0)

        'display EDI string
        txtEdiString.Text = sEdiString


    End Sub