+ /**
+ * Agrega filas desde el resultado de una consulta a una base de datos.
+ * Si no hay resultados, muestra un mensaje. Dependiendo de si es se pasa
+ * un objeto a usar o no, llama a addRowsObject() o addRowsResult()
+ * respectivamente.
+ * Ejemplo:
+ * @code
+ * $tabla = new MECON_HTML_TablaDB('agentes', array('width' => '100%'));
+ * $tabla->addRow(array('Nombre', 'Apellido'));
+ * // Supongo que $result tiene un DB_Result.
+ * $tabla->addRows($result, array('nombre', 'cuil'));
+ * $tabla->display();
+ * @endcode
+ *
+ * @param DB_Result $result Resultados de una consulta.
+ * @param array $campos Propiedades del objeto a mostrar.
+ * @param mixed $obj Objeto a usar. Puede ser un objeto instanciado o un
+ * string con el nombre de la clase.
+ */
+ function addRows($result, $campos, $obj = null) {
+ if ($result->numRows()) {
+ if ($obj) {
+ $this->addRowsObject($result, $campos, $obj);
+ } else {
+ $this->addRowsResult($result, $campos, $obj);
+ }
+ } else {
+ $id = $this->addRow(array(new MECON_HTML_Error("No se encontraron {$this->_desc}.")));
+ $this->updateCellAttributes($id, 0, array('colspan' => count($campos)));
+ }
+ }
+
+ /**
+ * Agrega filas usando un resultado.
+ *
+ * @param DB_Result $result Resultados de una consulta.
+ * @param array $campos Campos de la base de datos a mostrar.
+ */
+ function addRowsResult($result, $campos) {
+ while ($row = $result->fetchRow(DB_FETCHMODE_ASSOC)) {
+ $datos = array();
+ foreach ($campos as $campo) {
+ $datos[] = $row[$campo];
+ }
+ $this->addRow($datos);
+ }
+ }
+
+ /**
+ * Agrega filas usando un objeto.
+ * El objeto debe tener un método llamado cargar que acepte como primer (y
+ * único obligatorio) parámetro un DB_Result para cargar sus datos desde una
+ * base de datos.
+ *
+ * @param DB_Result $result Resultados de una consulta.
+ * @param array $campos Propiedades del objeto a mostrar.
+ * @param mixed $obj Objeto a usar. Puede ser un objeto instanciado o un
+ * string con el nombre de la clase.
+ *
+ * @see La interfaz MECON_DBO que tiene el método MECON_DBO::cargar().
+ */
+ function addRowsObject($result, $campos, $obj) {
+ if (is_string($obj)) {
+ $obj = new $obj;
+ }
+ if (!method_exists($obj, 'cargar')) {
+ $this->raiseError('La clase ' . get_class($obj) . ' no tiene un metodo cargar().');
+ }
+ while ($obj->cargar($result)) {
+ $datos = array();
+ foreach ($campos as $campo) {
+ $datos[] = $obj->$campo;
+ }
+ $this->addRow($datos);
+ }
+ }
+