Exemplo n.º 1
0
        private void RellenarTablaGeneral(ref DataTable myDataTable, NavisionDBTable tabla, bool distinct)
        {
            DataRow row;
            int[] fieldNumbers;
            string[] columnsName = null;
            int num;
            int fieldCount;
            if (((tabla.Columns == null) && (tabla.ColumnsName == null)) && !tabla.NoColumn)
            {
                fieldNumbers = tabla.FieldNumbers;
                fieldCount = tabla.FieldCount;
            }
            else
            {
                fieldCount = tabla.Columns.Length;
                fieldNumbers = tabla.Columns;
                columnsName = tabla.ColumnsName;
            }
            tabla.ConnectionDB.SelectLatestVersion();
            CFrontRecordset recordset = tabla.ConnectionDB.OpenTable(tabla.TableNo);
            NavisionFieldType[] typeArray = new NavisionFieldType[fieldCount];
            for (num = 0; num < fieldCount; num++)
            {
                string str;
                string typeName = "";
                if (columnsName == null)
                {
                    str = tabla.FieldName(fieldNumbers[num]);
                }
                else
                {
                    str = columnsName[num];
                }
                switch (recordset.FieldType(fieldNumbers[num], ref typeArray[num]))
                {
                    case "Code":
                        typeName = "System.String";
                        break;

                    case "Decimal":
                        typeName = "System.Decimal";
                        break;

                    case "Binary":
                        typeName = "System.String";
                        break;

                    case "Blob":
                        typeName = "System.String";
                        break;

                    case "Boolean":
                        typeName = "System.Boolean";
                        break;

                    case "Date":
                        typeName = "System.DateTime";
                        break;

                    case "DateFormula":
                        typeName = "System.String";
                        break;

                    case "DateTime":
                        typeName = "System.DateTime";
                        break;

                    case "Duration":
                        typeName = "System.String";
                        break;

                    case "Guid":
                        typeName = "System.String";
                        break;

                    case "Option":
                        typeName = "System.String";
                        break;

                    case "RecordId":
                        typeName = "System.String";
                        break;

                    case "Integer":
                        typeName = "System.Int32";
                        break;

                    case "BigInteger":
                        typeName = "System.Int64";
                        break;

                    case "TableFilter":
                        typeName = "System.String";
                        break;

                    case "Time":
                        typeName = "System.DateTime";
                        break;

                    case "Text":
                        typeName = "System.String";
                        break;

                    default:
                        throw new Exception("Error: Unknown data type -> " + recordset.FieldType(fieldNumbers[num], ref typeArray[num]).ToString());
                }
                DataColumn column = new DataColumn(str, Type.GetType(typeName));
                myDataTable.Columns.Add(column);
            }
            if (tabla.Key != null)
            {
                recordset.SetCurrentKey(tabla.Key);
            }
            object[,] filters = tabla.Filters;
            if (filters != null)
            {
                for (num = 0; num < (filters.Length / 2); num++)
                {
                    recordset.SetFilter(Convert.ToInt32(filters[num, 0]), Convert.ToString(filters[num, 1]));
                }
            }
            if (tabla.Reverse)
            {
                recordset.MoveLast();
            }
            else
            {
                recordset.MoveFirst();
            }
            if (recordset.EOF)
            {
                goto Label_03E0;
            }
            Label_0380:
            row = myDataTable.NewRow();
            for (num = 0; num < fieldCount; num++)
            {
                row[num] = recordset[fieldNumbers[num]];
            }
            myDataTable.Rows.Add(row);
            if (!distinct && !tabla.firstRow)
            {
                if (tabla.Reverse)
                {
                    if (recordset.MovePrevious())
                    {
                        goto Label_0380;
                    }
                }
                else if (recordset.MoveNext())
                {
                    goto Label_0380;
                }
            }
            Label_03E0:
            myDataTable.AcceptChanges();
            recordset.FreeRec();
            recordset.Close();
        }