WinBatch Tech Support Home

Database Search

If you can't find the information using the categories below, post a question over in our WinBatch Tech Support Forum.

TechHome

COMCONTROL
plus
plus

Can't find the information you are looking for here? Then leave a message over on our WinBatch Tech Support Forum.

A Basic Grid Tutorial

 Keywords:  Microsoft Hierarchical Grid Control mshflxgd mshflxgd.ocx OCX Dialog Control COMCONTROL

Using the Microsoft Hierarchical Grid Control (mshflxgd.ocx)

Stan Littlefield, January 28, 2006

UPDATED: Deana Falk, April 30, 2008

This tutorial is based on the Winbatch COMCONTROL object. In the dialog editor the object is inserted as. 

FLEXFormat=`WWWDLGED,6.1`
FLEXCaption=`MSHFlexgrid - Basics [displaying an XML Recordset)`
FLEXX=-01
FLEXY=-01
FLEXWidth=362
FLEXHeight=213
FLEXNumControls=004
FLEXProcedure=`dlgproc`
FLEXFont=`DEFAULT`
FLEXTextColor=`DEFAULT`
FLEXBackground=`DEFAULT,DEFAULT`
FLEXConfig=0

FLEX001=`317,191,036,012,PUSHBUTTON,DEFAULT,"E&xit",99,2,32,DEFAULT,DEFAULT,DEFAULT`
FLEX002=`003,003,352,182,COMCONTROL,'[myLicense]',"MSHierarchicalFlexGridLib.MSHFlexGrid.6",DEFAULT,8,DEFAULT,DEFAULT,DEFAULT,DEFAULT`
FLEX003=`005,191,058,012,PUSHBUTTON,DEFAULT,"Sort by Supplier",1,3,DEFAULT,DEFAULT,DEFAULT,DEFAULT`
FLEX004=`071,191,050,012,PUSHBUTTON,DEFAULT,"Sort by Product",2,4,DEFAULT,DEFAULT,DEFAULT,DEFAULT`

ButtonPushed=Dialog("FLEX")

The ‘grid’ will load an XML recordset (which is included at the end of this article and can be cut / pasted in notepad and saved as Inventory.xml). The dialog include includes a callback UDS, dlgproc() – the end result is


One important note: In the dialog code the reference to “[myLicense]” may need to be replaced with the license key of the .ocx – even though the grid control may be freely used and distributed. If you have a copy of Visual Studio, you can use a free download product from Microsoft, licreqst.exe– which when run will collect all controls on your PC and display a license key if it exists. For more details about licensing please read: COMCONTROL Licenses Explained


Another thing to know is that Microsoft makes the API for the grid available on MSDN
http://msdn.microsoft.com/en-us/library/aa228849(VS.60).aspx

 

Step 1: Determine the Datasource – in this case a persisted xml file

path = DirScript()
DirChange(path)
cXML  = StrCat(path,"Inventory.xml")
If !FileExist(cXML)
   Pause('Error','Unable to locate XML file. make sure Inventory.xml exists in the same directory as the script' )
   Exit
EndIf

oRS = ObjectCreate('ADODB.Recordset')
oRS.Open(cXML,"Provider=MSPersist;",,,256)
nS=1  ;used later for sorting
nP=1  ;used later for sorting

Step 2: create the grid dialog (code shown earlier)

The important point here is that the callback procedure assigns the grid control to a variable, initializes the data and handles any events or other dialog functions such as ButtonsPressed.  For simplicity sake dlgproc() is bare-bones with major tasks assigned to separate UDS.

#DefineSubRoutine dlgproc(handle,msg,id,p4,p5)
   Switch msg
      Case 0  ;Dialog Initialization
         oGrid = DialogObject(handle,2,3) ;creates our variable
         initgrid() ;loads the data and formats the grid
         ObjectEventAdd(oGrid, "Click", "Click") ;capture a grid event for special processing
         DialogProcOptions(handle, 2,1)
         Break
      Case 2
         Switch id
            Case 001      ;exit
               Return(1)
            Case 003      ;sort by supplier
               gSort(9,nS)
               nS=nS+1
               If nS>2 Then nS=1
               Return(-2)
            Case 004       ;sort by product
               gSort(3,nP)
               nP=nP+1
               If nP>2 Then nP=1
               Return(-2)
         EndSwitch
         Break
   EndSwitch
   Return -2
#EndSubRoutine

FLEXFormat=`WWWDLGED,6.1`
FLEXCaption=`MSHFlexgrid - Basics [displaying an XML Recordset)`
FLEXX=-01
FLEXY=-01
FLEXWidth=362
FLEXHeight=213
FLEXNumControls=004
FLEXProcedure=`dlgproc`
FLEXFont=`DEFAULT`
FLEXTextColor=`DEFAULT`
FLEXBackground=`DEFAULT,DEFAULT`
FLEXConfig=0
FLEX001=`317,191,036,012,PUSHBUTTON,DEFAULT,"E&xit",99,2,32,DEFAULT,DEFAULT,DEFAULT`
FLEX002=`003,003,352,182,COMCONTROL,'[myLicense]',"MSHierarchicalFlexGridLib.MSHFlexGrid.6",DEFAULT,8,DEFAULT,DEFAULT,DEFAULT,DEFAULT`
FLEX003=`005,191,058,012,PUSHBUTTON,DEFAULT,"Sort by Supplier",1,3,DEFAULT,DEFAULT,DEFAULT,DEFAULT`
FLEX004=`071,191,050,012,PUSHBUTTON,DEFAULT,"Sort by Product",2,4,DEFAULT,DEFAULT,DEFAULT,DEFAULT`
ButtonPushed=Dialog("FLEX")

Step 3: Nuts and Bolts – creating, formatting and addressing the grid

This is merely a start and touches a small percentage of the properties and methods. However, all grids must be able to refer to a datasource (oRS in this case) and rows/columns which are addressed by an array index. This is accomplished in initgrid():

#DefineSubRoutine initgrid()
   oGrid.Recordset = oRS
   oGrid.ColWidth(0)=100
   oGrid.AllowUserResizing = 3  ;both columns and rows
   oGrid.Wordwrap =1
   ;this next for..next sets alternate row colors
   For x = 1 To oGrid.Rows - 1
      oGrid.Row =x
      If x mod 2 == 0
         oGrid.RowSel = x
         For i = 1 To oGrid.Cols - 1
            oGrid.Col =i
            oGrid.ColSel = oGrid.Cols-1
            oGrid.CellBackColor = 14349263 ;rgb value as long
         Next
      EndIf
      oGrid.TextMatrix(x, 0) = x
   Next
   sizecols()
   oGrid.ExpandAll()
   Return(1)
#EndSubRoutine

 

The control displays an initial column(0) which acts like a row number. It needs to be visible if users are permitted to resize rows but we only make it 100 pixels wide. One further UDS, sizecols() is just a best guess on the width of each column.

#DefineSubRoutine sizecols()
   For z = 1 To oGrid.Cols - 1
      sLen = ""
      nLen = 0
      For y = 0 To oGrid.Rows - 1
         cText = oGrid.TextMatrix(y, z)
         If StrLen(cText) > nLen Then nLen = StrLen(cText)
      Next
      ; this needs some work
      If nLen<10
         oGrid.ColWidth(z) = nLen*100
      Else
         oGrid.ColWidth(z) = nLen*50
      EndIf
   Next
   Return(1)
#EndSubRoutine

 

Two of the buttons in the dialog are assigned to sort specific columns in the grid. Two numeric memvars keep track of the last sort order so that the next time the button is clicked the order is reversed (ascending/descending).

<
#DefineSubRoutine gSort(nCol,nOrder)
   oGrid.Col=nCol
   oGrid.Sort =nOrder
   Return(1)
#EndSubRoutine

 

The script also handles the click event. This could also be handled by adding the ComEvent (14) to the dialog procedure.

#DefineSubRoutine Click()
   nCol = oGrid.MouseCol
   nRow = oGrid.MouseRow
   oGrid.TextMatrix(nRow,nCol) = StrUpper( oGrid.TextMatrix(nRow,nCol) )
   oGrid.CellFontBold=1
   oGrid.CellTextStyle=2
   oGrid.FillStyle=1
   Message("Column Data",oGrid.TextMatrix(nRow,nCol))
   Return(1)
#EndSubRoutine

 

This captures and displays the current cell data, taking case to also, capitalize and highlight the cell.

 

With 3-4 more lines of code, you could also handle editing cell values (if allowed by the underlying dataset).

 

Hopefully the code snippets and snapshots provide a useful framework for developing sophisticated Winbatch applications utilizing grids.

 


Complete Source code:


GoSub UDFS

path = DirScript()
DirChange(path)
cXML  = StrCat(path,"Inventory.xml")
If !FileExist(cXML)
   Pause('Error','Unable to locate XML file. make sure Inventory.xml exists in the same directory as the script' )
   Exit
EndIf
oRS = ObjectCreate('ADODB.Recordset')
oRS.Open(cXML,"Provider=MSPersist;",,,256)
nS=1  ;used later for sorting
nP=1  ;used later for sorting

FLEXFormat=`WWWDLGED,6.1`
FLEXCaption=`MSHFlexgrid - Basics [displaying an XML Recordset)`
FLEXX=-01
FLEXY=-01
FLEXWidth=362
FLEXHeight=213
FLEXNumControls=004
FLEXProcedure=`dlgproc`
FLEXFont=`DEFAULT`
FLEXTextColor=`DEFAULT`
FLEXBackground=`DEFAULT,DEFAULT`
FLEXConfig=0
FLEX001=`317,191,036,012,PUSHBUTTON,DEFAULT,"E&xit",99,2,32,DEFAULT,DEFAULT,DEFAULT`
;FLEX002=`003,003,352,182,COMCONTROL,'[myLicense]',"MSHierarchicalFlexGridLib.MSHFlexGrid.6",DEFAULT,8,DEFAULT,DEFAULT,DEFAULT,DEFAULT`
FLEX002=`003,003,352,182,COMCONTROL,DEFAULT,"MSHierarchicalFlexGridLib.MSHFlexGrid.6",DEFAULT,8,DEFAULT,DEFAULT,DEFAULT,DEFAULT`
FLEX003=`005,191,058,012,PUSHBUTTON,DEFAULT,"Sort by Supplier",1,3,DEFAULT,DEFAULT,DEFAULT,DEFAULT`
FLEX004=`071,191,050,012,PUSHBUTTON,DEFAULT,"Sort by Product",2,4,DEFAULT,DEFAULT,DEFAULT,DEFAULT`
ButtonPushed=Dialog("FLEX")

Exit


:UDFS

#DefineSubRoutine dlgproc(handle,msg,id,p4,p5)
   Switch msg
      Case 0  ;Dialog Initialization
         oGrid = DialogObject(handle,2,3) ;creates our variable
         initgrid() ;loads the data and formats the grid
         ObjectEventAdd(oGrid, "Click", "Click") ;capture a grid event for special processing
         DialogProcOptions(handle, 2,1)
         Break
      Case 2
         Switch id
            Case 001      ;exit
               Return(1)
            Case 003      ;sort by supplier
               gSort(9,nS)
               nS=nS+1
               If nS>2 Then nS=1
               Return(-2)
            Case 004       ;sort by product
               gSort(3,nP)
               nP=nP+1
               If nP>2 Then nP=1
               Return(-2)
         EndSwitch
         Break
   EndSwitch
   Return -2
#EndSubRoutine

#DefineSubRoutine initgrid()
   oGrid.Recordset = oRS
   oGrid.ColWidth(0)=100
   oGrid.AllowUserResizing = 3  ;both columns and rows
   oGrid.Wordwrap =1
   ;this next for..next sets alternate row colors
   For x = 1 To oGrid.Rows - 1
      oGrid.Row =x
      If x mod 2 == 0
         oGrid.RowSel = x
         For i = 1 To oGrid.Cols - 1
            oGrid.Col =i
            oGrid.ColSel = oGrid.Cols-1
            oGrid.CellBackColor = 14349263 ;rgb value as long
         Next
      EndIf
      oGrid.TextMatrix(x, 0) = x
   Next
   sizecols()
   oGrid.ExpandAll()
   Return(1)
#EndSubRoutine

#DefineSubRoutine sizecols()
   For z = 1 To oGrid.Cols - 1
      sLen = ""
      nLen = 0
      For y = 0 To oGrid.Rows - 1
         cText = oGrid.TextMatrix(y, z)
         If StrLen(cText) > nLen Then nLen = StrLen(cText)
      Next
      ; this needs some work
      If nLen<10
         oGrid.ColWidth(z) = nLen*100
      Else
         oGrid.ColWidth(z) = nLen*50
      EndIf
   Next
   Return(1)
#EndSubRoutine

#DefineSubRoutine gSort(nCol,nOrder)
   oGrid.Col=nCol
   oGrid.Sort =nOrder
   Return(1)
#EndSubRoutine

#DefineSubRoutine Click()
   nCol = oGrid.MouseCol
   nRow = oGrid.MouseRow
   oGrid.TextMatrix(nRow,nCol) = StrUpper( oGrid.TextMatrix(nRow,nCol) )
   oGrid.CellFontBold=1
   oGrid.CellTextStyle=2
   oGrid.FillStyle=1
   Message("Column Data",oGrid.TextMatrix(nRow,nCol))
   Return(1)
#EndSubRoutine


Return

 

The XML file – cut and paste everything below this line:

<xml xmlns:s='uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882'

                    xmlns:dt='uuid:C2F41010-65B3-11d1-A29F-00AA00C14882'

                    xmlns:rs='urn:schemas-microsoft-com:rowset'

                    xmlns:z='#RowsetSchema'>

<s:Schema id='RowsetSchema'>

                    <s:ElementType name='row' content='eltOnly' rs:updatable='true'>

                                        <s:AttributeType name='Product_Line' rs:number='1' rs:nullable='true' rs:maydefer='true' rs:writeunknown='true'

                                                             rs:basetable='Inventory' rs:basecolumn='Product_Line'>

                                                            <s:datatype dt:type='string' dt:maxLength='3'/>

                                        </s:AttributeType>

                                        <s:AttributeType name='Product_Number' rs:number='2' rs:nullable='true' rs:maydefer='true' rs:writeunknown='true'

                                                             rs:basetable='Inventory' rs:basecolumn='Product_Number'>

                                                            <s:datatype dt:type='string' dt:maxLength='5'/>

                                        </s:AttributeType>

                                        <s:AttributeType name='Product_Description' rs:number='3' rs:nullable='true' rs:maydefer='true' rs:writeunknown='true'

                                                             rs:basetable='Inventory' rs:basecolumn='Product_Description'>

                                                            <s:datatype dt:type='string' dt:maxLength='75'/>

                                        </s:AttributeType>

                                        <s:AttributeType name='Item_Price' rs:number='4' rs:nullable='true' rs:maydefer='true' rs:writeunknown='true'

                                                             rs:basetable='Inventory' rs:basecolumn='Item_Price'>

                                                            <s:datatype dt:type='number' rs:dbtype='currency' dt:maxLength='8' rs:precision='19' rs:fixedlength='true'/>

                                        </s:AttributeType>

                                        <s:AttributeType name='Number_On_Hand' rs:number='5' rs:nullable='true' rs:maydefer='true' rs:writeunknown='true'

                                                             rs:basetable='Inventory' rs:basecolumn='Number_On_Hand'>

                                                            <s:datatype dt:type='string' dt:maxLength='3'/>

                                        </s:AttributeType>

                                        <s:AttributeType name='On_Sale' rs:number='6' rs:maydefer='true' rs:writeunknown='true' rs:basetable='Inventory'

                                                             rs:basecolumn='On_Sale'>

                                                            <s:datatype dt:type='boolean' dt:maxLength='2' rs:fixedlength='true'/>

                                        </s:AttributeType>

                                        <s:AttributeType name='Reorder_Level' rs:number='7' rs:nullable='true' rs:maydefer='true' rs:writeunknown='true'

                                                             rs:basetable='Inventory' rs:basecolumn='Reorder_Level'>

                                                            <s:datatype dt:type='string' dt:maxLength='2'/>

                                        </s:AttributeType>

                                        <s:AttributeType name='Reorder_Quantity' rs:number='8' rs:nullable='true' rs:maydefer='true' rs:writeunknown='true'

                                                             rs:basetable='Inventory' rs:basecolumn='Reorder_Quantity'>

                                                            <s:datatype dt:type='string' dt:maxLength='3'/>

                                        </s:AttributeType>

                                        <s:AttributeType name='Supplier_Name' rs:number='9' rs:nullable='true' rs:maydefer='true' rs:writeunknown='true'

                                                             rs:basetable='Inventory' rs:basecolumn='Supplier_Name'>

                                                            <s:datatype dt:type='string' dt:maxLength='35'/>

                                        </s:AttributeType>

                                        <s:AttributeType name='Supplier_Country' rs:number='10' rs:nullable='true' rs:maydefer='true' rs:writeunknown='true'

                                                             rs:basetable='Inventory' rs:basecolumn='Supplier_Country'>

                                                            <s:datatype dt:type='string' dt:maxLength='11'/>

                                        </s:AttributeType>

                                        <s:AttributeType name='Order_Price' rs:number='11' rs:nullable='true' rs:maydefer='true' rs:writeunknown='true'

                                                             rs:basetable='Inventory' rs:basecolumn='Order_Price'>

                                                            <s:datatype dt:type='number' rs:dbtype='currency' dt:maxLength='8' rs:precision='19' rs:fixedlength='true'/>

                                        </s:AttributeType>

                                        <s:AttributeType name='Delivery_Days' rs:number='12' rs:nullable='true' rs:maydefer='true' rs:writeunknown='true'

                                                             rs:basetable='Inventory' rs:basecolumn='Delivery_Days'>

                                                            <s:datatype dt:type='string' dt:maxLength='2'/>

                                        </s:AttributeType>

                                        <s:extends type='rs:rowbase'/>

                    </s:ElementType>

</s:Schema>

<rs:data>

                    <z:row Product_Line='050' Product_Number='10010' Product_Description='Stand, small (1 shelf, 3 legs)' Item_Price='25'

                                         Number_On_Hand='2' On_Sale='True' Reorder_Level='5' Reorder_Quantity='15' Supplier_Name='Bob&#x27;s Home Furniture'

                                         Supplier_Country='USA' Order_Price='15' Delivery_Days='10'/>

                    <z:row Product_Line='020' Product_Number='10023' Product_Description='Bookcase (2 shelves)' Item_Price='85'

                                         Number_On_Hand='12' On_Sale='True' Reorder_Level='5' Reorder_Quantity='20' Supplier_Name='Carlson&#x27;s Furniture Ltd.'

                                         Supplier_Country='GERMANY' Order_Price='60' Delivery_Days='15'/>

                    <z:row Product_Line='250' Product_Number='20010' Product_Description='Chair, rocking' Item_Price='150' Number_On_Hand='4'

                                         On_Sale='False' Reorder_Level='5' Reorder_Quantity='20' Supplier_Name='Bob&#x27;s Home Furniture' Supplier_Country='USA'

                                         Order_Price='110' Delivery_Days='16'/>

                    <z:row Product_Line='400' Product_Number='20020' Product_Description='Chair, dining (with arms)' Item_Price='60'

                                         Number_On_Hand='20' On_Sale='True' Reorder_Level='10' Reorder_Quantity='100' Supplier_Name='Bob&#x27;s Home Furniture'

                                         Supplier_Country='USA' Order_Price='35' Delivery_Days='12'/>

                    <z:row Product_Line='200' Product_Number='20021' Product_Description='Chair, dining (no arms)' Item_Price='45'

                                         Number_On_Hand='50' On_Sale='True' Reorder_Level='12' Reorder_Quantity='100' Supplier_Name='Bob&#x27;s Home Furniture'

                                         Supplier_Country='USA' Order_Price='25' Delivery_Days='12'/>

                    <z:row Product_Line='200' Product_Number='20025' Product_Description='Chair, dining (no arms)' Item_Price='50'

                                         Number_On_Hand='40' On_Sale='False' Reorder_Level='12' Reorder_Quantity='100' Supplier_Name='Bob&#x27;s Home Furniture'

                                         Supplier_Country='USA' Order_Price='35' Delivery_Days='12'/>

                    <z:row Product_Line='250' Product_Number='35000' Product_Description='Couch table (48 inches)' Item_Price='150'

                                         Number_On_Hand='0' On_Sale='True' Reorder_Level='5' Reorder_Quantity='10' Supplier_Name='Neverland Furniture'

                                         Supplier_Country='NETHERLANDS' Order_Price='100' Delivery_Days='20'/>

                    <z:row Product_Line='250' Product_Number='35010' Product_Description='Couch table (60 inches)' Item_Price='175'

                                         Number_On_Hand='6' On_Sale='False' Reorder_Level='10' Reorder_Quantity='10' Supplier_Name='Neverland Furniture'

                                         Supplier_Country='NETHERLANDS' Order_Price='120' Delivery_Days='20'/>

                    <z:row Product_Line='200' Product_Number='35030' Product_Description='Table, dining round (48 inches)' Item_Price='1200'

                                         Number_On_Hand='1' On_Sale='False' Reorder_Level='10' Reorder_Quantity='10' Supplier_Name='Wooden Furniture Worldwide'

                                         Supplier_Country='GERMANY' Order_Price='800' Delivery_Days='20'/>

                    <z:row Product_Line='200' Product_Number='35040' Product_Description='Table, dining oval (96 inches)' Item_Price='2500'

                                         Number_On_Hand='7' On_Sale='False' Reorder_Level='5' Reorder_Quantity='5' Supplier_Name='Wooden Furniture Worldwide'

                                         Supplier_Country='GERMANY' Order_Price='1200' Delivery_Days='20'/>

                    <z:row Product_Line='200' Product_Number='35050' Product_Description='Table, dining oval (102 inches)' Item_Price='4500'

                                         Number_On_Hand='8' On_Sale='False' Reorder_Level='5' Reorder_Quantity='5' Supplier_Name='Wooden Furniture Worldwide'

                                         Supplier_Country='GERMANY' Order_Price='3500' Delivery_Days='20'/>

                    <z:row Product_Line='250' Product_Number='35250' Product_Description='Coffee Table (48&#x22; octagon)' Item_Price='95'

                                         Number_On_Hand='15' On_Sale='False' Reorder_Level='10' Reorder_Quantity='15' Supplier_Name='Neverland Furniture'

                                         Supplier_Country='NETHERLANDS' Order_Price='65' Delivery_Days='8'/>

                    <z:row Product_Line='250' Product_Number='35255' Product_Description='Coffee Table (36x60 rectangle)' Item_Price='110'

                                         Number_On_Hand='10' On_Sale='False' Reorder_Level='10' Reorder_Quantity='20' Supplier_Name='Neverland Furniture'

                                         Supplier_Country='NETHERLANDS' Order_Price='75' Delivery_Days='8'/>

                    <z:row Product_Line='250' Product_Number='35260' Product_Description='Coffee Table (48&#x22; round)' Item_Price='95'

                                         Number_On_Hand='9' On_Sale='False' Reorder_Level='10' Reorder_Quantity='15' Supplier_Name='Neverland Furniture'

                                         Supplier_Country='NETHERLANDS' Order_Price='65' Delivery_Days='8'/>

                    <z:row Product_Line='400' Product_Number='47000' Product_Description='Entertainment center (3 piece)' Item_Price='2500'

                                         Number_On_Hand='5' On_Sale='False' Reorder_Level='5' Reorder_Quantity='5' Supplier_Name='Ernie&#x27;s Entertainment Furniture'

                                         Supplier_Country='JAPAN' Order_Price='2000' Delivery_Days='30'/>

                    <z:row Product_Line='400' Product_Number='47001' Product_Description='Entertainment center (middle hutch)' Item_Price='1500'

                                         Number_On_Hand='4' On_Sale='False' Reorder_Level='5' Reorder_Quantity='5' Supplier_Name='Ernie&#x27;s Entertainment Furniture'

                                         Supplier_Country='JAPAN' Order_Price='1000' Delivery_Days='30'/>

                    <z:row Product_Line='400' Product_Number='47002' Product_Description='Entertainment center (right side)' Item_Price='750'

                                         Number_On_Hand='4' On_Sale='False' Reorder_Level='5' Reorder_Quantity='5' Supplier_Name='Ernie&#x27;s Entertainment Furniture'

                                         Supplier_Country='JAPAN' Order_Price='650' Delivery_Days='30'/>

                    <z:row Product_Line='400' Product_Number='47003' Product_Description='Entertainment center (left side)' Item_Price='750'

                                         Number_On_Hand='4' On_Sale='False' Reorder_Level='5' Reorder_Quantity='5' Supplier_Name='Ernie&#x27;s Entertainment Furniture'

                                         Supplier_Country='JAPAN' Order_Price='650' Delivery_Days='30'/>

                    <z:row Product_Line='400' Product_Number='47004' Product_Description='Entertainment center (right side w/ glass door)'

                                         Item_Price='1000' Number_On_Hand='8' On_Sale='False' Reorder_Level='5' Reorder_Quantity='5' Supplier_Name='Ernie&#x27;s Entertainment Furniture'

                                         Supplier_Country='JAPAN' Order_Price='800' Delivery_Days='30'/>

                    <z:row Product_Line='400' Product_Number='47005' Product_Description='Entertainment center (left side w/glass door)'

                                         Item_Price='1000' Number_On_Hand='8' On_Sale='False' Reorder_Level='5' Reorder_Quantity='5' Supplier_Name='Ernie&#x27;s Entertainment Furniture'

                                         Supplier_Country='JAPAN' Order_Price='800' Delivery_Days='30'/>

                    <z:row Product_Line='400' Product_Number='47010' Product_Description='Entertainment center (proj. TV center shelf - 35&#x22;)'

                                         Item_Price='150' Number_On_Hand='9' On_Sale='False' Reorder_Level='5' Reorder_Quantity='5' Supplier_Name='Ernie&#x27;s Entertainment Furniture'

                                         Supplier_Country='JAPAN' Order_Price='100' Delivery_Days='15'/>

                    <z:row Product_Line='400' Product_Number='47011' Product_Description='Entertainment center (proj. TV center shelf - 40&#x22;)'

                                         Item_Price='250' Number_On_Hand='5' On_Sale='False' Reorder_Level='5' Reorder_Quantity='5' Supplier_Name='Ernie&#x27;s Entertainment Furniture'

                                         Supplier_Country='JAPAN' Order_Price='175' Delivery_Days='15'/>

                    <z:row Product_Line='400' Product_Number='47012' Product_Description='Entertainment center (proj. TV center shelf - 35&#x22; w/ glass door)'

                                         Item_Price='300' Number_On_Hand='4' On_Sale='False' Reorder_Level='5' Reorder_Quantity='10' Supplier_Name='Ernie&#x27;s Entertainment Furniture'

                                         Supplier_Country='JAPAN' Order_Price='250' Delivery_Days='15'/>

                    <z:row Product_Line='400' Product_Number='47013' Product_Description='Entertainment center (proj. TV center shelf - 40&#x22; w/glass doors)'

                                         Item_Price='400' Number_On_Hand='4' On_Sale='False' Reorder_Level='5' Reorder_Quantity='40' Supplier_Name='Ernie&#x27;s Entertainment Furniture'

                                         Supplier_Country='JAPAN' Order_Price='325' Delivery_Days='15'/>

                    <z:row Product_Line='400' Product_Number='47100' Product_Description='TV stand (32 inch max)' Item_Price='85'

                                         Number_On_Hand='10' On_Sale='False' Reorder_Level='5' Reorder_Quantity='5' Supplier_Name='Ernie&#x27;s Entertainment Furniture'

                                         Supplier_Country='JAPAN' Order_Price='60' Delivery_Days='10'/>

                    <z:row Product_Line='400' Product_Number='47150' Product_Description='TV stand (40 inch max)' Item_Price='150'

                                         Number_On_Hand='10' On_Sale='False' Reorder_Level='5' Reorder_Quantity='5' Supplier_Name='Ernie&#x27;s Entertainment Furniture'

                                         Supplier_Country='JAPAN' Order_Price='120' Delivery_Days='10'/>

                    <z:row Product_Line='400' Product_Number='47200' Product_Description='Stereo stand' Item_Price='150' Number_On_Hand='15'

                                         On_Sale='False' Reorder_Level='5' Reorder_Quantity='5' Supplier_Name='Ernie&#x27;s Entertainment Furniture' Supplier_Country='JAPAN'

                                         Order_Price='120' Delivery_Days='10'/>

                    <z:row Product_Line='250' Product_Number='50250' Product_Description='Desk, office (72 inches, 6 drawer)' Item_Price='8500'

                                         Number_On_Hand='0' On_Sale='False' Reorder_Level='3' Reorder_Quantity='3' Supplier_Name='Carlson&#x27;s Furniture Ltd.'

                                         Supplier_Country='GERMANY' Order_Price='7000' Delivery_Days='15'/>

                    <z:row Product_Line='250' Product_Number='50252' Product_Description='Credenza (48 inches)' Item_Price='350'

                                         Number_On_Hand='6' On_Sale='True' Reorder_Level='3' Reorder_Quantity='3' Supplier_Name='Worldwide Office Furniture'

                                         Supplier_Country='GERMANY' Order_Price='85' Delivery_Days='15'/>

                    <z:row Product_Line='200' Product_Number='50254' Product_Description='Printer stand' Item_Price='225' Number_On_Hand='0'

                                         On_Sale='False' Reorder_Level='5' Reorder_Quantity='5' Supplier_Name='Worldwide Office Furniture' Supplier_Country='GERMANY'

                                         Order_Price='275' Delivery_Days='15'/>

                    <z:row Product_Line='050' Product_Number='50260' Product_Description='Desk, chair w/ arms and rollers' Item_Price='400'

                                         Number_On_Hand='10' On_Sale='False' Reorder_Level='6' Reorder_Quantity='6' Supplier_Name='Worldwide Office Furniture'

                                         Supplier_Country='GERMANY' Order_Price='325' Delivery_Days='12'/>

                    <z:row Product_Line='250' Product_Number='50265' Product_Description='Desk, chair no arms w/ rollers' Item_Price='375'

                                         Number_On_Hand='10' On_Sale='False' Reorder_Level='6' Reorder_Quantity='6' Supplier_Name='Worldwide Office Furniture'

                                         Supplier_Country='GERMANY' Order_Price='300' Delivery_Days='12'/>

                    <z:row Product_Line='050' Product_Number='50270' Product_Description='Desk, chair no arms or rollers' Item_Price='350'

                                         Number_On_Hand='10' On_Sale='False' Reorder_Level='5' Reorder_Quantity='5' Supplier_Name='Worldwide Office Furniture'

                                         Supplier_Country='GERMANY' Order_Price='275' Delivery_Days='12'/>

                    <z:row Product_Line='200' Product_Number='50275' Product_Description='Desk, chair w/ arms no rollers' Item_Price='365'

                                         Number_On_Hand='10' On_Sale='False' Reorder_Level='5' Reorder_Quantity='5' Supplier_Name='Worldwide Office Furniture'

                                         Supplier_Country='GERMANY' Order_Price='290' Delivery_Days='12'/>

                    <z:row Product_Line='300' Product_Number='65000' Product_Description='Bar stool - 36&#x22;' Item_Price='50'

                                         Number_On_Hand='25' On_Sale='False' Reorder_Level='50' Reorder_Quantity='300' Supplier_Name='Bob&#x27;s Bar Stuff'

                                         Supplier_Country='CANADA' Order_Price='35' Delivery_Days='10'/>

                    <z:row Product_Line='300' Product_Number='65001' Product_Description='Bar stool - 40&#x22;' Item_Price='65'

                                         Number_On_Hand='15' On_Sale='False' Reorder_Level='50' Reorder_Quantity='150' Supplier_Name='Bob&#x27;s Bar Stuff'

                                         Supplier_Country='CANADA' Order_Price='40' Delivery_Days='10'/>

                    <z:row Product_Line='300' Product_Number='65002' Product_Description='Bar stool - 48&#x22;' Item_Price='85'

                                         Number_On_Hand='10' On_Sale='False' Reorder_Level='20' Reorder_Quantity='100' Supplier_Name='Bob&#x27;s Bar Stuff'

                                         Supplier_Country='CANADA' Order_Price='55' Delivery_Days='10'/>

                    <z:row Product_Line='300' Product_Number='65100' Product_Description='Bar table (normal height) - 36x36 (square)'

                                         Item_Price='100' Number_On_Hand='30' On_Sale='False' Reorder_Level='20' Reorder_Quantity='50' Supplier_Name='Bob&#x27;s Bar Stuff'

                                         Supplier_Country='CANADA' Order_Price='65' Delivery_Days='15'/>

                    <z:row Product_Line='300' Product_Number='65110' Product_Description='Bar table (normal height) - 48x60 (rectangle)'

                                         Item_Price='175' Number_On_Hand='30' On_Sale='False' Reorder_Level='20' Reorder_Quantity='50' Supplier_Name='Bob&#x27;s Bar Stuff'

                                         Supplier_Country='CANADA' Order_Price='140' Delivery_Days='15'/>

                    <z:row Product_Line='300' Product_Number='65120' Product_Description='Bar table (normal height) - 36 (round)'

                                         Item_Price='120' Number_On_Hand='25' On_Sale='False' Reorder_Level='20' Reorder_Quantity='50' Supplier_Name='Bob&#x27;s Bar Stuff'

                                         Supplier_Country='CANADA' Order_Price='85' Delivery_Days='15'/>

                    <z:row Product_Line='300' Product_Number='65130' Product_Description='Bar table (normal height) - 48 (round)'

                                         Item_Price='180' Number_On_Hand='20' On_Sale='False' Reorder_Level='20' Reorder_Quantity='50' Supplier_Name='Bob&#x27;s Bar Stuff'

                                         Supplier_Country='CANADA' Order_Price='145' Delivery_Days='15'/>

                    <z:row Product_Line='300' Product_Number='65140' Product_Description='Bar table (40&#x22;) - 36x36 (square)'

                                         Item_Price='150' Number_On_Hand='20' On_Sale='False' Reorder_Level='15' Reorder_Quantity='30' Supplier_Name='Bob&#x27;s Bar Stuff'

                                         Supplier_Country='CANADA' Order_Price='115' Delivery_Days='15'/>

                    <z:row Product_Line='300' Product_Number='65150' Product_Description='Bar table (40&#x22;) - 36 (round)' Item_Price='170'

                                         Number_On_Hand='20' On_Sale='False' Reorder_Level='15' Reorder_Quantity='40' Supplier_Name='Bob&#x27;s Bar Stuff'

                                         Supplier_Country='CANADA' Order_Price='135' Delivery_Days='15'/>

                    <z:row Product_Line='300' Product_Number='65160' Product_Description='Bar table (48&#x22;) - 36x36 (square)'

                                         Item_Price='200' Number_On_Hand='20' On_Sale='False' Reorder_Level='10' Reorder_Quantity='30' Supplier_Name='Bob&#x27;s Bar Stuff'

                                         Supplier_Country='CANADA' Order_Price='165' Delivery_Days='15'/>

                    <z:row Product_Line='300' Product_Number='65170' Product_Description='Bar table (48&#x22;) - 36 (round)' Item_Price='220'

                                         Number_On_Hand='20' On_Sale='False' Reorder_Level='10' Reorder_Quantity='30' Supplier_Name='Bob&#x27;s Bar Stuff'

                                         Supplier_Country='CANADA' Order_Price='185' Delivery_Days='15'/>

</rs:data>

</xml>

 


Article ID:   W16926
File Created: 2019:08:14:09:07:42
Last Updated: 2019:08:14:09:07:42