private void btnGen_Click(object sender, System.EventArgs e)
        {
            // This is just an example program to show how to create a HIPAA 270 4010 X092 EDI X12 file
            // in C# with the Framework EDI component

            string sSefFile, sEdiFile, sPath;
            ediDocument oEdiDoc;
            ediInterchange oInterchange;
            ediGroup oGroup;
            ediTransactionSet oTransactionset;
            ediDataSegment oSegment = new ediDataSegment();
            ediSchema oSchema;
            ediSchemas oSchemas;

            sPath = AppDomain.CurrentDomain.BaseDirectory;
            sSefFile = "270_X092.SEF";
            sEdiFile = "270_X092_OUTPUT.x12";

            oEdiDoc = new ediDocument();

            // Change the cursor type from dynamic to forward to improve speed performance
            oEdiDoc.CursorType = DocumentCursorTypeConstants.Cursor_ForwardWrite;

            // Disable the internal standard reference library to be memory effecient
            oSchemas = oEdiDoc.GetSchemas();
            oSchemas.EnableStandardReference = false;

            // Load the SEF file
            oSchema = oEdiDoc.ImportSchema(sPath + sSefFile, 0);

            // Set termintors
            oEdiDoc.SegmentTerminator ="~{13:10}" ;    //tilde followed by a carraige return line feed
            oEdiDoc.ElementTerminator ="*";
            oEdiDoc.CompositeTerminator =":";

            // create the interchange segment
            oInterchange = oEdiDoc.CreateInterchange("X", "004010");
            ediDataSegment.Set(ref oSegment, (ediDataSegment) oInterchange.GetDataSegmentHeader());
            oSegment.set_DataElementValue(1, 0, "00"); 
            //oSegment.set_DataElementValue(2, 0, "00");
            oSegment.set_DataElementValue(3, 0, "01");
            oSegment.set_DataElementValue(4, 0, "SECRET");
            oSegment.set_DataElementValue(5, 0, "ZZ");
            oSegment.set_DataElementValue(6, 0, "9999");
            oSegment.set_DataElementValue(7, 0, "ZZ");
            oSegment.set_DataElementValue(8, 0, "7777");
            oSegment.set_DataElementValue(9, 0, "930603");
            oSegment.set_DataElementValue(10, 0, "1230");
            oSegment.set_DataElementValue(11, 0, "U");
            oSegment.set_DataElementValue(12, 0, "00401");
            oSegment.set_DataElementValue(13, 0, "000000905");
            oSegment.set_DataElementValue(14, 0, "1");
            oSegment.set_DataElementValue(15, 0, "T");
            oSegment.set_DataElementValue(16, 0, ":");

            // create the functional group segment
            oGroup = oInterchange.CreateGroup("004010X092");
            ediDataSegment.Set(ref oSegment, (ediDataSegment) oGroup.GetDataSegmentHeader());
            oSegment.set_DataElementValue(1, 0, "HS");
            oSegment.set_DataElementValue(2, 0, "SENDER CODE");
            oSegment.set_DataElementValue(3, 0, "RECEIVER CODE");
            oSegment.set_DataElementValue(4, 0, "19970101");
            oSegment.set_DataElementValue(5, 0, "0802");
            oSegment.set_DataElementValue(6, 0, "1");
            oSegment.set_DataElementValue(7, 0, "X");
            oSegment.set_DataElementValue(8, 0, "004010X092");



            // HEADER
            // TRANSACTION SET HEADER
            oTransactionset = oGroup.CreateTransactionSet("270");
            ediDataSegment.Set(ref oSegment, (ediDataSegment) oTransactionset.GetDataSegmentHeader());
            oSegment.set_DataElementValue(2, 0, "1234");

            ediDataSegment.Set(ref oSegment, oTransactionset.CreateDataSegment("BHT"));
            oSegment.set_DataElementValue(1, 0, "0022"); 
            oSegment.set_DataElementValue(2, 0, "01");
            oSegment.set_DataElementValue(3, 0, "12345");
            oSegment.set_DataElementValue(4, 0, "20070329");
            oSegment.set_DataElementValue(5, 0, "1225");
            oSegment.set_DataElementValue(6, 0, "RT");

            int nHlCounter = 0;
            int nHlInfoReceiverParent;
            int nHlSubscriberParent;
            int nHlDependentParent;


            //--------------------------------------------------------------------------------
            // DETAIL INFO SOURCE LEVEL

            int nInfoSources = 1;

            for (int nInfoSourceCtr=1; nInfoSourceCtr <= nInfoSources; nInfoSourceCtr++)
            {
                nHlCounter = nHlCounter + 1;
                nHlInfoReceiverParent = nHlCounter;

                ediDataSegment.Set(ref oSegment, oTransactionset.CreateDataSegment("HL\\HL"));
                oSegment.set_DataElementValue(1, 0, nHlCounter.ToString() );
                oSegment.set_DataElementValue(3, 0, "20");
                oSegment.set_DataElementValue(4, 0, "1");

                // INFORMATION SOURCE NAME
                ediDataSegment.Set(ref oSegment, oTransactionset.CreateDataSegment("HL\\NM1\\NM1"));
                oSegment.set_DataElementValue(1, 0, "PR");
                oSegment.set_DataElementValue(2, 0, "2");
                oSegment.set_DataElementValue(3, 0, "WILSON");
                oSegment.set_DataElementValue(4, 0, "BILL");
                oSegment.set_DataElementValue(8, 0, "PI");
                oSegment.set_DataElementValue(9, 0, "87728");


                //----------------------------------------------------------------------------------
                // INFORMATION RECEIVER LEVEL

                int nInfoReceivers = 1;

                for (int nInfoReceiverCtr=1; nInfoReceiverCtr <= nInfoReceivers; nInfoReceiverCtr++)
                {
                    nHlCounter = nHlCounter + 1;
                    nHlSubscriberParent = nHlCounter;

                    ediDataSegment.Set(ref oSegment, oTransactionset.CreateDataSegment("HL\\HL"));
                    oSegment.set_DataElementValue(1, 0, nHlCounter.ToString() );
                    oSegment.set_DataElementValue(2, 0, nHlInfoReceiverParent.ToString() );
                    oSegment.set_DataElementValue(3, 0, "21");
                    oSegment.set_DataElementValue(4, 0, "1");

                    // INFORMATION RECEIVER NAME
                    ediDataSegment.Set(ref oSegment, oTransactionset.CreateDataSegment("HL\\NM1\\NM1"));
                    oSegment.set_DataElementValue(1, 0, "1P");
                    oSegment.set_DataElementValue(2, 0, "1");
                    oSegment.set_DataElementValue(3, 0, "PATRICK");
                    oSegment.set_DataElementValue(4, 0, "FITZGERALD");
                    oSegment.set_DataElementValue(5, 0, "M");
                    oSegment.set_DataElementValue(8, 0, "SV");
                    oSegment.set_DataElementValue(9, 0, "0202034");

                    //INFORMATION RECEVIER ADDITIONAL IDENTIFICATION.
                    ediDataSegment.Set(ref oSegment, oTransactionset.CreateDataSegment("HL\\NM1\\REF"));
                    oSegment.set_DataElementValue(1, 0, "N5");
                    oSegment.set_DataElementValue(2, 0, "129");

                    // INFORMATION RECEIVER ADDRESS.
                    ediDataSegment.Set(ref oSegment, oTransactionset.CreateDataSegment("HL\\NM1\\N3"));
                    oSegment.set_DataElementValue(1, 0, "Cross street Dr.");
                    oSegment.set_DataElementValue(2, 0, "Suite 987");

                    // INFORMATION RECEIVER CITY, STATE ZIP
                    ediDataSegment.Set(ref oSegment, oTransactionset.CreateDataSegment("HL\\NM1\\N4"));
                    oSegment.set_DataElementValue(1, 0, "NewYork");
                    oSegment.set_DataElementValue(2, 0, "NY");
                    oSegment.set_DataElementValue(3, 0, "10023");
                    oSegment.set_DataElementValue(4, 0, "USA");

                    // INFORMATION RECEIVER CONTACT INFORMATION
                    ediDataSegment.Set(ref oSegment, oTransactionset.CreateDataSegment("HL\\NM1\\PER"));
                    oSegment.set_DataElementValue(1, 0, "IC");
                    oSegment.set_DataElementValue(2, 0, "BILLING DEPT");
                    oSegment.set_DataElementValue(3, 0, "TE");
                    oSegment.set_DataElementValue(4, 0, "2065551212");
                    oSegment.set_DataElementValue(5, 0, "EX");
                    oSegment.set_DataElementValue(6, 0, "2104"); 
                    oSegment.set_DataElementValue(7, 0, "FX");
                    oSegment.set_DataElementValue(8, 0, "2065551214");

                    // INFORMATION RECEIVER PROVIDER INFORMATION
                    ediDataSegment.Set(ref oSegment, oTransactionset.CreateDataSegment("HL\\NM1\\PRV"));
                    oSegment.set_DataElementValue(1, 0, "PE");
                    oSegment.set_DataElementValue(2, 0, "ZZ");
                    oSegment.set_DataElementValue(3, 0, "207K00000X");

                    //------------------------------------------------------------------------------
                    // SUBSCRIBER LEVEL

                    int nSubscribers = 1;

                    for (int nSubscbrCtr=1; nSubscbrCtr <= nSubscribers; nSubscbrCtr++)
                    {
                        nHlCounter = nHlCounter + 1;
                        nHlDependentParent = nHlCounter;

                        ediDataSegment.Set(ref oSegment, oTransactionset.CreateDataSegment("HL\\HL"));
                        oSegment.set_DataElementValue(1, 0, nHlCounter.ToString() );
                        oSegment.set_DataElementValue(2, 0, nHlSubscriberParent.ToString() );
                        oSegment.set_DataElementValue(3, 0, "22");
                        oSegment.set_DataElementValue(4, 0, "1");

                        // SUBSCRIBER TRACE NUMBER
                        ediDataSegment.Set(ref oSegment, oTransactionset.CreateDataSegment("HL\\TRN"));
                        oSegment.set_DataElementValue(1, 0, "1");
                        oSegment.set_DataElementValue(2, 0, "98175-02157");
                        oSegment.set_DataElementValue(3, 0, "9877281234");

                        // SUBSCRIBER NAME
                        ediDataSegment.Set(ref oSegment, oTransactionset.CreateDataSegment("HL\\NM1\\NM1"));
                        oSegment.set_DataElementValue(1, 0, "IL");
                        oSegment.set_DataElementValue(2, 0, "1"); 
                        oSegment.set_DataElementValue(3, 0, "JONES");
                        oSegment.set_DataElementValue(4, 0, "EDWARD");
                        oSegment.set_DataElementValue(5, 0, "S");
                        oSegment.set_DataElementValue(8, 0, "MI");
                        oSegment.set_DataElementValue(9, 0, "11122333301");

                        // SUBSCRIBER ADDITIONAL IDENTIFICATION
                        ediDataSegment.Set(ref oSegment, oTransactionset.CreateDataSegment("HL\\NM1\\REF"));
                        oSegment.set_DataElementValue(1, 0, "1L");
                        oSegment.set_DataElementValue(2, 0, "19430519");

                        // SUBSCRIBER ADDRESS INFORMATATION ,SUBSCRIBER CITY STATE ZIP
                        ediDataSegment.Set(ref oSegment, oTransactionset.CreateDataSegment("HL\\NM1\\N3"));
                        oSegment.set_DataElementValue(1, 0, "435 th Street");
                        oSegment.set_DataElementValue(2, 0, "435 th Street");

                        ediDataSegment.Set(ref oSegment, oTransactionset.CreateDataSegment("HL\\NM1\\N4"));
                        oSegment.set_DataElementValue(1, 0, "NewYork");
                        oSegment.set_DataElementValue(2, 0, "NY");
                        oSegment.set_DataElementValue(3, 0, "14008");

                        // SUBSCRIBER DEMOGRAPHIC INFORMATION
                        ediDataSegment.Set(ref oSegment, oTransactionset.CreateDataSegment("HL\\NM1\\DMG"));
                        oSegment.set_DataElementValue(1, 0, "D8");
                        oSegment.set_DataElementValue(2, 0, "19430917");
                        oSegment.set_DataElementValue(3, 0, "F");

                        // SUBSCRIBER DATE
                        ediDataSegment.Set(ref oSegment, oTransactionset.CreateDataSegment("HL\\NM1\\DTP"));
                        oSegment.set_DataElementValue(1, 0, "102");
                        oSegment.set_DataElementValue(2, 0, "D8");
                        oSegment.set_DataElementValue(3, 0, "19980818");

                        // SUBSCRIBER ELIGIBILITY OR BENEFIT INQUIRY INFORMATION
                        ediDataSegment.Set(ref oSegment, oTransactionset.CreateDataSegment("HL\\NM1\\EQ\\EQ"));
                        oSegment.set_DataElementValue(1, 0, "98");
                        oSegment.set_DataElementValue(3, 0, "FAM");

                        //SUBSCRIBER SPEND DOWN AMOUNT
                        ediDataSegment.Set(ref oSegment, oTransactionset.CreateDataSegment("HL\\NM1\\EQ\\AMT"));
                        oSegment.set_DataElementValue(1, 0, "R");
                        oSegment.set_DataElementValue(2, 0, "37.5");

                        //SUBSCRIBER ELIGIBILITY OR BENEFIT
                        ediDataSegment.Set(ref oSegment, oTransactionset.CreateDataSegment("HL\\NM1\\EQ\\III"));
                        oSegment.set_DataElementValue(1, 0, "BK");
                        oSegment.set_DataElementValue(2, 0, "486");

                        //SUBSCRIBER ADDITIONAL INFORMATION
                        ediDataSegment.Set(ref oSegment, oTransactionset.CreateDataSegment("HL\\NM1\\EQ\\REF"));
                        oSegment.set_DataElementValue(1, 0, "9F");
                        oSegment.set_DataElementValue(2, 0, "66045");

                        //SUBSCRIBER ELIGIBILITY/BENEFIT DATE
                        ediDataSegment.Set(ref oSegment, oTransactionset.CreateDataSegment("HL\\NM1\\EQ\\DTP"));
                        oSegment.set_DataElementValue(1, 0, "472");
                        oSegment.set_DataElementValue(2, 0, "D8");
                        oSegment.set_DataElementValue(3, 0, "19990707");


                        //-------------------------------------------------------------------------------
                        //DEPENDENT LEVEL

                        int nDependents = 1;

                        for (int nDependentCtr=1; nDependentCtr <= nDependents; nDependentCtr++)
                        {
                            nHlCounter = nHlCounter + 1;

                            ediDataSegment.Set(ref oSegment, oTransactionset.CreateDataSegment("HL\\HL"));
                            oSegment.set_DataElementValue(1, 0, nHlCounter.ToString() );
                            oSegment.set_DataElementValue(2, 0, nHlDependentParent.ToString() ); 
                            oSegment.set_DataElementValue(3, 0, "23");
                            oSegment.set_DataElementValue(4, 0, "0");

                            //DEPENDENT TRACE NUMBER
                            ediDataSegment.Set(ref oSegment, oTransactionset.CreateDataSegment("HL\\TRN"));
                            oSegment.set_DataElementValue(1, 0, "1");
                            oSegment.set_DataElementValue(2, 0, "98175-02157");
                            oSegment.set_DataElementValue(3, 0, "9877281234");
                            oSegment.set_DataElementValue(4, 0, "RADIOLOGY");

                            //DEPENDENT NAME
                            ediDataSegment.Set(ref oSegment, oTransactionset.CreateDataSegment("HL\\NM1\\NM1"));
                            oSegment.set_DataElementValue(1, 0, "03");
                            oSegment.set_DataElementValue(2, 0, "1");
                            oSegment.set_DataElementValue(3, 0, "SMITH");
                            oSegment.set_DataElementValue(4, 0, "MARY LOU");
                            oSegment.set_DataElementValue(5, 0, "R");

                            //DEPENDENT ADDITIONAL IDENTIFICATION
                            ediDataSegment.Set(ref oSegment, oTransactionset.CreateDataSegment("HL\\NM1\\REF"));
                            oSegment.set_DataElementValue(1, 0, "SY");
                            oSegment.set_DataElementValue(2, 0, "003221234");
              
                            //DEPENDENT ADDRESS
                            ediDataSegment.Set(ref oSegment, oTransactionset.CreateDataSegment("HL\\NM1\\N3"));
                            oSegment.set_DataElementValue(1, 0, "WATERLOO");
                            oSegment.set_DataElementValue(2, 0, "32 PARK ST");

                            //DEPENDENT CITY/STATE/ZIP CODE
                            ediDataSegment.Set(ref oSegment, oTransactionset.CreateDataSegment("HL\\NM1\\N4"));
                            oSegment.set_DataElementValue(1, 0, "NEWYORK");
                            oSegment.set_DataElementValue(2, 0, "NY");
                            oSegment.set_DataElementValue(3, 0, "10023");
                            oSegment.set_DataElementValue(4, 0, "032");

                            //PROVIDER INFORMATION
                            ediDataSegment.Set(ref oSegment, oTransactionset.CreateDataSegment("HL\\NM1\\PRV"));
                            oSegment.set_DataElementValue(1, 0, "PE");
                            oSegment.set_DataElementValue(2, 0, "ZZ");
                            oSegment.set_DataElementValue(3, 0, "207K00000X");

                            //DEPENDENT DEMOGRAPHIC INFORMATION
                            ediDataSegment.Set(ref oSegment, oTransactionset.CreateDataSegment("HL\\NM1\\DMG"));
                            oSegment.set_DataElementValue(1, 0, "D8");
                            oSegment.set_DataElementValue(2, 0, "19430121");
                            oSegment.set_DataElementValue(3, 0, "M");

                            //DEPENDENT DATE
                            ediDataSegment.Set(ref oSegment, oTransactionset.CreateDataSegment("HL\\NM1\\DTP"));
                            oSegment.set_DataElementValue(1, 0, "102");
                            oSegment.set_DataElementValue(2, 0, "D8");
                            oSegment.set_DataElementValue(3, 0, "19500808");

                            //DEPENDENT ELIGIBILITY OR BENEFIT INQUIRY INFORMATION
                            ediDataSegment.Set(ref oSegment, oTransactionset.CreateDataSegment("HL\\NM1\\EQ\\EQ"));
                            oSegment.set_DataElementValue(1, 0, "30");
                            oSegment.set_DataElementValue(3, 0, "FAM");

                            //DEPENDENT ELIGIBILITY OR BENEFIT ADDITIONAL INQUIRY 
                            ediDataSegment.Set(ref oSegment, oTransactionset.CreateDataSegment("HL\\NM1\\EQ\\III"));
                            oSegment.set_DataElementValue(1, 0, "BK");
                            oSegment.set_DataElementValue(2, 0, "486");

                            //DEPENDENT ADDITIONAL INFORMATION
                            ediDataSegment.Set(ref oSegment, oTransactionset.CreateDataSegment("HL\\NM1\\EQ\\REF"));
                            oSegment.set_DataElementValue(1, 0, "9F");
                            oSegment.set_DataElementValue(2, 0, "660415");

                            //DEPENDENT ELIGIBILITY/BENEFIT DATE
                            ediDataSegment.Set(ref oSegment, oTransactionset.CreateDataSegment("HL\\NM1\\EQ\\DTP"));
                            oSegment.set_DataElementValue(1, 0, "472");
                            oSegment.set_DataElementValue(2, 0, "D8");
                            oSegment.set_DataElementValue(3, 0, "19570807");

                        }    //nDependents

                    }    //nSubscribers

                }    //nInfoReceivers

            }    //nInfoSources

            oEdiDoc.Save(sPath + sEdiFile);

            MessageBox.Show("Done. Output = " + sPath + sEdiFile);    

        }

    Click here to download a trial version of the Framework EDI