Mostrando entradas con la etiqueta Código. Mostrar todas las entradas
Mostrando entradas con la etiqueta Código. Mostrar todas las entradas

24 febrero 2016

Cómo seleccionar un valor concreto de un objeto Select y un Input Radio (HTML) utilizando PHP


En esta ocasión les enseñaré cómo podemos seleccionar un valor concreto de un objeto Select (HTML) utilizando PHP a partir del valor guardado en una variable de sesión. En el ejemplo la variable es $_SESSION["NumeroGenero"].

En este ejemplo en particular el objeto Select (conocido por ComboBox en otros lenguajes de programación) tiene por valores los dos géneros sexuales, y un punto. En su origen, antes de introducirle las lineas PHP (código programado entre las palabras clave y ?>), el valor que se cargaba cada vez que la página se refrescaba era el punto. Sin embargo, un cliente me pidió que realizara cambios para ahorrarle tiempo, y después de pensar y buscar en Internet llegué a esta conclusión.

Pero si en un fichero anteriormente (en nuestro caso se llama check_anonimo.php) se procesaba la variable $_SESSION["NumeroGenero"] cuando por segunda vez se llegara a la página del formulario  (ubicada en el archivo llamado anonimo.php) dibujando cada objeto (inclusive el objeto Select que tratamos), por cada uno de los valores a agregar sería necesario leer la variable $_SESSION["NumeroGenero"] para comparar. Es decir,  el código quedaría así:

<tr>
                   <td>Género:</td>
                   <td><select name="genero" class="Estilo2" id="select222">
                     <option value="." <?php if($_SESSION["NumeroGenero"] == 0) echo 'selected="selected"'; ?>>.</option>
                     <option value="Masculino" <?php if($_SESSION["NumeroGenero"] == 1) echo 'selected="selected"'; ?>>Masculino</option>
                     <option value="Femenino" <?php if($_SESSION["NumeroGenero"] == 2) echo 'selected="selected"'; ?>>Femenino</option>
                                      </select></td>
 </tr>


Mi fuente en este caso, fue https://codex.wordpress.org/Function_Reference/selected



Para finalizar les enseñaré cómo podemos seleccionar un valor concreto de un objeto Input Radio (HTML) utilizando PHP a partir del valor guardado en una variable de sesión. En el ejemplo la variable es $_SESSION["NumeroGeografico"].

En este ejemplo en particular el objeto Input Radio tiene por valores los tres valores que se corresponden con tres zonas geográficas. En su origen, antes de introducirle las lineas PHP (código programado entre las palabras clave ?>)el valor que se cargaba cada vez que la página se refrescaba era el punto. Sin embargo, con este código y con el anterior se cargará el valor que en el anterior usó se estableció. 


Porque si en un fichero anteriormente (en nuestro caso se llama check_anonimo.php) se procesaba la variable $_SESSION["NumeroGeografico"] cuando por segunda vez se llegara a la página del formulario  (ubicada en el archivo llamado anonimo.php) dibujando cada objeto (inclusive el objeto Input Radio que tratamos), por cada uno de los valores a agregar sería necesario leer la variable $_SESSION["NumeroGeografico"] para comparar. Es decir,  el código quedaría así:

<tr>
               <td height="352" valign="top">                 <div align="left">
                 <p>GEOGRÁFICO:</p>
                 <table width="670" border="0" cellpadding="0" cellspacing="0" bgcolor="#FFFFFF">
                   <tr valign="top">
                     <td width="209" height="50"><input name="zona" type="radio" value="ZONA A" <?php if ($_SESSION["NumeroGeografico"] == 1 ) echo 'checked="checked"'; ?>>
                       <span class="Estilo6"> ZONA A</span> (La Estrella. La Milagosa, S. Antón) </td>
                     <td width="235"><input name="zona" type="radio" value="ZONA B" <?php if ($_SESSION["NumeroGeografico"] == 2 ) echo 'checked="checked"'; ?>>
                       <span class="Estilo6"> ZONA B </span> (Carretas, Hnos. Falcó;, Hospital, Universidad) </td>
                     <td width="226"><input name="zona" type="radio" value="ZONA C" <?php if ($_SESSION["NumeroGeografico"] == 3 ) echo 'checked="checked"'; ?>>
                       <span class="Estilo6"> ZONA C </span> (Fátima, Franciscanos, Parque Sur, Pedro Lamata, San Pedro Mortero, Santa Teresa, Sepulcro Bolera, Vereda) </td>

                   </tr>
                   </table>
                   </div>
                   </td>
                   </tr>

26 marzo 2015

Cómo solventar el problema de las tildes y las eñes pronto al programar con PHP y HTML



Qué hacer cuando trabajando con PHP / HTML tienes un texto con tildes o eñes y no quieres pasar media hora reemplazando caracteres.


Si estás en HTML, yendo a la sección META puedes indicar que el valor de la propiedad charset valga iso-8859-1, quedando así la sentencia completa: . Abajo un ejemplo:

. . .
// mostramos los resultados
echo $row["campo1"];
?>
. . .


En cambio si estas en PHP, el proceder es diferente. Aquí se utiliza una función en las primeras lineas de código PHP. El ejemplo a continuación:


header('Content-Type: text/html; charset=ISO-8859-1');
?>

Y hasta aquí es todo.

16 diciembre 2012

Acciones básicas de Python manejando una base de datos SQLite3


Buenas tardes!

Después de día y medio programando he llegado a terminar esta muestra sencilla muestra de cómo interactuar con Python en una base de datos SQLite3

Para esto cree la clase AccionesSQL. Dentro de ella, la primera linea importa la librería que necesitaremos para funcionar : import sqlite3

El segundo trozo de código relevante está en el constructor de la clase, función __init__(self): Aquí se crea un objeto conexión que se conectara con la base de dato que queramos. Después se crea   un cursor, que es propio de la conexión creada.

La función insertarTelefonoBD es el tercer trozo importante. Aquí se hace una inserción. Para esto usamos una sentencia SQL ejecutada sobre el cursor. Y al punto se realiza un commit porque sino  la inserción no se  hace efectiva.

Poco más abajo tenemos la función  modificarTelefonoBD. Aquí, se desarrolla una actualización de un campo existente y salvo la sentencia SQL todo es igual a caso anterior. Lo mismo pasa con la función suprimirTelefonoBD. Mas esta, suprime.

La penúltima función es listarTelefonosBD y en ella se cargan y muestran todos los registros de la tabla indicada. Se puede añadir una clausula WHERE y también una ORDER BY, y así acotaríamos u ordenaríamos.

La función buscarTelefonosBDxNumero busca teléfonos dependiendo de la opción indicada. Me apeteció hacer 4 tipos de búsqueda: coincidencia total, coincidencia parcial, que empezase por un valor determinado o que acabase según un valor. Luego, para finalizar recorrí el cursor donde se guardaron los registros resultantes, y mostré los datos guardados.

A continuación, el código integro:

import sqlite3 
import sys
class AccionesSQL:
    def __init__(self): 
        self.conexion=sqlite3.connect('listinTelefonico.sqlite')
        self.cursor=self.conexion.cursor()

    def insertarTelefonoBD(self,nombre1,numero1, notas1):
        SQL='insert into Telefonos (Nombre, NumeroTelefono, Notas) values("'+nombre1+'","'+numero1+'","'+notas1+'")'
        self.cursor.execute(SQL)
        self.conexion.commit()
        print 'se ha insertado exitosamente'

    def modificarTelefonoBD(self,id1, nombre1, numero1, notas1):
        SQL='update Telefonos set Nombre="'+ nombre1 + '",NumeroTelefono="' + numero1 + '", Notas="'+notas1 +'" where id='+str(id1)
        self.cursor.execute(SQL)
        self.conexion.commit()
        print 'modificacion exitosa'

    def suprimirTelefonoBD(self, id):
        SQL='delete from Telefonos where ID='+str(id)
        self.cursor.execute(SQL)
        self.conexion.commit()

    def listarTelefonosBD (self):
        SQL = 'select * from Telefonos order by nombre '
        self.cursor.execute(SQL)
        for row in self.cursor:
            print "%s --> %s --> %s" % (row[0],row[1],row[2])

    def buscarTelefonosBDxNumero(self, numero, opcion):
        SQL='HOLA'
        if opcion==1:
            print 'Numeros que terminan por ' + numero
            SQL = 'select * from Telefonos where NumeroTelefono like "%'+numero +'"'
            self.cursor.execute(SQL)
        elif opcion==2:
              print 'Numeros que contienen el numero ' + numero
              SQL = 'select * from Telefonos where NumeroTelefono like "%'+numero +'%"'
              self.cursor.execute(SQL)
        elif opcion==3:
            print 'Numeros que empieza exactamente son el numero ' + numero
            SQL = 'select * from Telefonos where NumeroTelefono = "'+numero +'"'
            self.cursor.execute(SQL)
        elif opcion==4:
            print 'Numeros que empizan por ' + numero
            SQL = 'select * from Telefonos where NumeroTelefono like "'+numero + '%"'
            self.cursor.execute(SQL)
        for row in self.cursor:
            print "%s --> %s --> %s" % (row[0],row[1],row[2])

Esta parrafada que se gestiona en diferentes funciones la llamo desde otra clase según procede. Se llama Telefonos y su código es este:


from AccionesSQL import AccionesSQL
        
class Telefonos:

    def __init__(self,nmb1,tlf1,nts1):
        self.Nombre = nmb1
        self.NumTelefono = tlf1
        self.Notas = nts1
        self.ID=0    
        
    def imprimir(self):
        print self.Nombre + " --> " + self.NumTelefono
        
    def insertar(self):
        a1=AccionesSQL()
        a1.insertarTelefonoBD(self.Nombre,self.NumTelefono,self.Notas)
        
    def modificar(self, id1, nombre1, numeroTelefono1, notas1):
        a1=AccionesSQL()
        a1.modificarTelefono(id1, nombre1, numeroTelefono1, notas1)
        
    def suprimir (self, id1):
        a1=AccionesSQL()
        a1.suprimirTelefonoBD(id1)
    
    def listar(self):
       a1=AccionesSQL()
       a1.listarTelefonosBD()
       
    def buscarPorNumero (self, numero1, op1):
        a1=AccionesSQL()
        a1.buscarTelefonosBDxNumero(numero1,op1) 

La sentencia from AccionesSQL import AccionesSQL sirve para importar el código creado en la clase anterior. De esta manera podremos funcionar con las funciones anteriores llamándolas desde u objeto de esa clase.

Así por ejemplo en la función  insertar podremos utilizar la función insertarTelefonoBD después de haber cread un objeto. Y en las diferentes funciones, el funcionamiento es igual.

Si he creado dos clases no ha sido por ir de listo, sino porque así todo funciona mejor. Es más sencillo y eficiente.


Saludos.

21 mayo 2012

SQL Server: Sentencia que de un dato de tipo datetime nos extrae el dia, el mes, el año, la hora, el minuto y el segundo

Aparentemente resultaba complicado, pero nada más lejos de la realidad. Con esta breve sentencia, saco en diferentes columnas el día, el mes, el año, la hora, el minuto y el segundo.

select dtpfecha, day(dtpfecha) "dia", month(dtpfecha)"mes", year(dtpfecha) "año", datepart(hour,dtpfecha)"hora", datepart(minute,dtpfecha) "minutos", datepart(second,dtpfecha) "segundos"
from [basededatos].[dbo].[tabla]

No me rompí mucho la cabeza, la solución la encontré aquí.
Aquí os dejo una foto del resultado al ejecutar la sentencia.



Saludos.

04 mayo 2012

C#: Función que devuelve la primera letra de un string en mayuscula

Sencillo y eficaz código que devuelve un string con el primer caracter en mayuscula. Así por ejemplo, metiendo como parámetro el string víctor está loco, nos devolverá Víctor está loco.
 
        private string UppercaseFirst(string s)
        {
            // Check for empty string.
            if (string.IsNullOrEmpty(s))
            {
                return string.Empty;
            }
            // Return char and concat substring.
            return char.ToUpper(s[0]) + s.Substring(1);
        }
Saludos.

25 abril 2012

SQL SERVER: Cómo activar/desactivar que la clave primaria de una tabla sea autoincrementada.


Tras una breve y éxitosa búsqueda por Google, encontré que esta es la sintaxis:

SET IDENTITY_INSERT [ database. [ owner. ] ] { table } { ON | OFF }

Por ejemplo:

set identity_insert [mibasededatos].[dbo].[clientes] on
insert into clientes(IntIdCliente, strRazonSocial, intMunicipio,DtpFechaAlta) values (124,'Probando1',534, '6/10/1982 10:00:15')
set identity_insert [klevinmig].[dbo].[clientes] off

Donde la primera linea del ejemplo desactiva el incremento automatico del campo IntIdCliente, la segunda realiza la acción de inserción y la tercera vuelve a activar el autoincremento.

Adiós.

09 abril 2012

C#: Función que acorta una cifra decimal para sólo mostrar dos números

Hola. He creado esta función (cuyo nombre es pelín desastroso, y de hecho solicito que me sugerais ideas), porque me pidieron que debia acortar el precio mostrado en el report factura para sólo imprimir dos decimales.
Habra otros modos de hacerlo, pero a mi este me resulta muy útil.


private string AcortarCifra(decimal cifra)

{


string strCifra = Convert.ToString(cifra);

int dondeestalacoma = strCifra.IndexOf(',');
string partedecimal;
string parteentera;
if (dondeestalacoma != -1)
{
if (strCifra.Length > (dondeestalacoma + 2))
{
partedecimal = strCifra.Substring(dondeestalacoma + 1, 2);
parteentera = strCifra.Substring(0, dondeestalacoma);
strCifra = parteentera + "," + partedecimal;
}

}
else
strCifra = strCifra + ",00";
return strCifra;

}

10 febrero 2012

Monodevelop y MySQL:Inserción



Utilizando Monodevelop he creado un formulario simple y con él, en una base de datos llamada probatura, hice un simple ejrcicio para insertar registros en una tabla.

string cadenaDeConexion = "Server=localhost;Database=mono_prueba;User ID=admin;Password=123;Pooling=false;";

MySql.Data.MySqlClient.MySqlConnection conexion = new MySql.Data.MySqlClient.MySqlConnection(cadenaDeConexion);

conexion.Open();

MySql.Data.MySqlClient.MySqlCommand oComando = conexion.CreateCommand();

string sql ="INSERT INTO probatura(cadena) VALUES ('"+txtCadena.Text+"')";

oComando.CommandText=sql;

oComando.ExecuteNonQuery();

conexion.Close();

Viendo este ejemploo creo que hay poco que explicar. Aún así haré un breve resumen.

Por supuesto, lo primero es descargar el conector para MySQL. Yo descargué este: mysql-connector-net-5.2.7.zip. Que está aquí
Tras instalarlo, marché a referencias y me agregué las nuevas referencias.
Luego, ya en el archivo .cs escribí:
using System.Data;
y
using System.Data.SqlClient;
para invocar a los nuevos componentes.

Volviendo al código Ya en la función insertar, lo primero que hago es inicializar una conxión, qu seguidamente abro.
Segundo paso, me creo un comano que inicializo con una función de la conexión.
Tercero, preparo la instrucción SQL para insertar en la cuarta linea.
En el cuarto paso, ejecuto el comendo.
Y para finalizar cierro la conexión.

Saludos

19 diciembre 2011

C#: ¿Cómo se ordena una TList ?

Es muy sencillo. De tan fácil como es hasta cavilé demasiado.

Teniendo una lista:
TList listaDePersonasDeContacto = DataRepository.PersonsContacto.GetAll();
y esta se ordena así:
listaDePersonasDeContacto.Sort(PersonasContactoColumn.StrApellido1.ToString());

Por cierto, PersonasContactoColumn.StrApellido1.ToString() devuelve la columna por la que queremos ordenar. En este caso el primer apellido del contacto.

Saludos!

Gracias Edwin por explicarmelo porque yo me calenté mucho la cabeza. ¡Con lo tirao que está!

P.D.: Haciendo esto, indico que en caso de que haya coincidencia, mire el segundo apellido
listaDePersonasDeContacto.Sort(PersonasContactoColumn.StrApellido1.ToString() + ", " + PersonasContactoColumn.StrApellido2.ToString());

12 diciembre 2011

C #; Cómo crear checkbox en tiempo de ejecución.

En este caso he subido código que crea checkbox en tiempo de ejecución. Porque el report que lo utiliza requiere que por cada archivo localizado en un directorio (incluyendo subdirectorios) se añada así al informe, en lugar de como texto normal en una label normal. Supongo que es un pijotada pero me ha servido para aprender una cosa nueva. Asique ya me podria ir a la cama sino fuese porque son las 9:20.


private void CrearCheckbox(string texto)

{



posicionY += 23; /*incremento la posicionY (esta variabled dtermina donde se va a ubicar el checkbox)*/
try
{
Detail.HeightF = posicionY; /*aumento la longitud del detalle*/
DevExpress.XtraReports.UI.XRCheckBox chkNombreFichero1 = new XRCheckBox(); /*creo el checkbox*/
chkNombreFichero1.Name = "chk" + numeroDeFicheros.ToString(); /*le doy nombre*/
chkNombreFichero1.WidthF = 615; /*le doy ancho */
chkNombreFichero1.HeightF = 23; /*le doy altura*/
chkNombreFichero1.Text = texto; /*le doy el mismo valor que el nombre del fichero*/
chkNombreFichero1.TopF = posicionY - 23; /*lo coloco en la posición*/
chkNombreFichero1.Checked = true; /*lo activo*/
chkNombreFichero1.Visible = true;
numeroDeFicheros += 1; //incremento el valor para que los nombres no se repitan
Detail.Controls.Add(chkNombreFichero1);
}
catch (Exception ex)
{
}
}

Saludos desde Albacete.

18 noviembre 2011

Cálculo de la diferencia en horas y minutos de dos horarios




Estaba meditando como resolver un código que me calculase la diferencia entre dos horas cuando se terminó la jornada laboral. Entonces decidí que tal código lo haría en Python como práctica de un aprendizaje.

Y cómo no, tras un ratejo en el que he disfrutado con Python (ese lenguaje que no gusta a mis compañeros de trabajo al punto del que no le ven ni uso ni futuro), he resuelto el código necesario.








Perdonen por haber puesto en una imagen el códigio fuente pero lo hice por causas mayores: El operador de comparativa (>) era confundido con los delimitadores de las etiquetas de HTML.

El código podria tener más complejidad, pero por hoy esta perfecto. Mañana más.

Saludos!

08 octubre 2011

Ejercicio hecho en C # que carga en una combo subcadeenas escritas en un textbox y separadas por ;

Este ejercicio, como reza el titulo del articulo, consiste en cargar en la combo cmbDatos, las palabras delimitadas por ; que se escriben en txtString.
El uso del ArrayList lista es puramente para mi comodidad porque así, cuando probaba la aplicación iba corroborado que subcadenas se extraian.

private void btnCargar_Click(object sender, EventArgs e)
{
cmbDatos.Items.Clear();
ArrayList lista = new ArrayList();
string subcadena;
string cadena = txtString.Text;
while (cadena.Length > 0)
{
int indice = cadena.IndexOf(';');
if (indice > 0)
subcadena = cadena.Substring(0, indice);
else
{
subcadena = cadena;
cadena = "";
}
lista.Add(subcadena);
int numeroDeCararteres= (cadena.Length-1) - indice;
if (numeroDeCararteres>-1)
cadena = cadena.Substring(indice+ 1,numeroDeCararteres);


}
for (int i = 0; i < lista.Count; i++)
{
cmbDatos.Items.Add(lista[i].ToString());
}
}

Saludos.

26 mayo 2011

Función SQL que devuelve el numero de coincidencias de un caracter en una cadena

Funcíon SQL que devuelve el numero de coincidencias de un caracter en una cadena

CREATE FUNCTION [dbo].[fnCountChar] ( @pInput VARCHAR(max), @pSearchChar CHAR(1) )

RETURNS INT
BEGIN

DECLARE @vInputLength INT
DECLARE @vIndex INT
DECLARE @vCount INT

SET @vCount = 0
SET @vIndex = 1
SET @vInputLength = DATALENGTH(@pInput)

WHILE @vIndex <= @vInputLength
BEGIN
IF SUBSTRING(@pInput, @vIndex, 1) = @pSearchChar
SET @vCount = @vCount + 1

SET @vIndex = @vIndex + 1
END

RETURN @vCount

END

13 marzo 2011

En C sharp, insertar registros en una base de datos Access (versión 97) usando las librerias ODBC


Ayer, tras muchas horas buscando por Internet un ejemplo válido de cómo agregar registros en una base de datos Access, versión 97, utilizando las funciones de las librerias ODBC, di, al rededor de las 6 de la tarde con esta página web 32.36.2.Use DataTable to insert a Row

Aquí dejo mí codigio, logrado en base a esa página que os he dicho:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.OleDb;


namespace GesPro.Tipo
{
class Tipo
{
string tipo;
string descripcion;
//constructor sin parametros de la clase
public Tipo()
{
this.descripcion = "";
this.tipo = "";
}
//constructor con parametros de la clase
public Tipo(string _tipo, string _descripcion)
{
this.descripcion = _descripcion;
this.tipo = _tipo;
}
// función que inserta nuevos regisrtros en la tabla Tipo de la base de datos GesPro.mdb
public void InsertarNuevoTipo(Tipo _tipo)
{
string ruta = System.IO.Directory.GetCurrentDirectory() + @"\GesPro.mdb"; //indica la ruta donde está la base de dxatos
string cadenaDeConexion = @"Provider=Microsoft.JET.OLEDB.4.0;" + @"data source=" + ruta; //establece cadena de conexión con la base de datos
OleDbConnection conexion = new OleDbConnection(cadenaDeConexion); //creo un objeto conexion
string seleccionarTodosLosRegistros = "SELECT * FROM Tipo";
conexion.Open(); //abro conexión
OleDbDataAdapter oAdaptador = new OleDbDataAdapter(seleccionarTodosLosRegistros,conexion); //creo un adaptador con una sql que selecciona todos los registros
OleDbCommandBuilder oBuilder = new OleDbCommandBuilder(oAdaptador);

DataSet oDsTipo = new DataSet("Tipo"); //creo un objeto dataset
oAdaptador.Fill(oDsTipo,"Tipo");
DataTable oTablaTipo = oDsTipo.Tables["Tipo"]; //creo una tabla para datos y le añado el nuevo registro campo a campo
DataRow oRow = oTablaTipo.NewRow();
oRow["Tipo"] = _tipo.tipo;
oRow["Descripcion"] = _tipo.descripcion;
oTablaTipo.Rows.Add(oRow);
oAdaptador.Update(oDsTipo, "Tipo"); //actualizo el objeto adaptador

conexion.Close();
}

}

}

07 enero 2011

26 septiembre 2010

En C#: Gestor de directorios

Basandome en En C#: Cómo montar un navegador en un TreeView ( 2º versión) hice los apaños necesarios para que ahora me sacara los subdirectorios del direwctorio raiz llamado Documentos y ubicado dentro de la carpeta Debug del proyecto. Algo que se hace así:
Application.StartupPath + "\\Documentos";
Si, y es esa barra, y no esta /. Aviso porque luego la piciamos confundiendonos con Linux.


Las diferencias enrtre un proyecto y otro son:


1. Ahora cargo el contenido de una carpeta, sus subdirectorios. Utilizando como nodo-raiz uno que tenga por ruta la ruta-inicial, que vale la concatenación de Application.StartupPath más el nombre del directorio raiz. Para el nombre del nodo-raiz, poodemos usar la \tipica o el nombre de la carpeta contanedora. Anteriormente, en la segunda versión, usabamos una función que cargaba los drivers, ahora no, ahora cargamos los subdirectorios. Así:

public void Inicio2()

{
//lo primero, cargsr el contenido de la carpeta raiz
rutaInicial = Application.StartupPath + "\\Documentos";

DirectoryInfo dirInf = new DirectoryInfo(rutaInicial);
try
{
foreach (DirectoryInfo subdir in dirInf.GetDirectories())
{
//de cada directorio se obtiene el nombre y el fullname y se convierte a nodo. El nodo se agrega al principal
SuperTreeNode nodo = new SuperTreeNode();
nodo.Text = subdir.Name;
nodo.Ruta = subdir.FullName;
NodoRaiz.Nodes.Add(nodo);
StateLblInformacion.Text = "";
}
}
catch (Exception ex)
{
//en la barra de estado uestro los errores q se pueden gnerar (falta de derechos o unidad no lista)
StateLblInformacion.Text = ex.Message;

}
}

2. La otra diferencia importante, no es nada del otro mundo: deshabilitar el botón que permite suprimir un directorio y la opción del menú contextual. Y esto se hace en el evento AfterSelect del control TreeView. Así:

if (NodoSeleccionado.Ruta.CompareTo(NodoRaiz.Ruta) == 0)
BtnBorrarDirectorio.Enabled = false;
else
BtnBorrarDirectorio.Enabled = true;
MenuItemBorrarDirectorio.Enabled = BtnBorrarDirectorio.Enabled;



Saludos.

05 septiembre 2010

Consejos de Rodrigo para futuro código con ASP, JavaScript, C Sharp, componentes Devexpress y no recuerdo qué más

El viernes el colega de trabajo Rodrigo se pasó buen rato ayudandome a resolver un código sencillo, pero repleto de errores por mi novatez.

Primero, el código javascript se tiene que separar de los archivos aspx porque así se gana limpieza. Estos nuevos archivos se llamarán como los aspx pero con extensión js. Y serán incluidos en los archivos form. De esta manera, siendo esto un ejemlo:

Y ojito con qué nombre ponen a ClientInstanceName, porque en los .js, a las variables de los asp, se las conoce por ese nombre. Se sugiere que el ID de un control y el clientinstancename sean el mismo.

Segundo, javascript es C. Sin enbargo, como en nuestro caso usamos herramientas DevExpress, tendremos que usar los métodos de estas herramientas. Para saber cuales son, pues vamos a la ayuda, y allí tecleamos el nombre del control.

Tercero, ah! Ojo, ojito... No podemos usar un visible común. Sino, que tenemos que usar un clientVisible. Porque la tenemos que visualizar o dejar de hacerlo, de lado del cliente, y no del lado del servidor. En tonces si usamos Visible, nos va a fallar.

Consejo, no vayan de listos, y... Otra cosa, observen si el navegdor seleccionado no dibuja una señal de advertencia.. Porque si lo hace, en el código tienen un error, aunque no se haya detectado en el depurador.

Otros consejos, pero de diseño: usen tablas, y siempre con el mismo número de columnas. Y otra cosa. Uff, no paro. Utilicen y reutilicen UserForm, porque así les va a cundir más.


Saludos.