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(); }