miércoles, 24 de diciembre de 2008

Nueva Ley[realemente insolito]

Insolito por no decir otra cosa. :(.

como tienen tanto tiempo para preocuparse por estas cosas digo yo


--
Atte.
Victor Hugo Saavedra
http://vhspiceros.blogspot.com

Feliz Navidad Y propero Año Nuevo



Para todos los que leen esto y pasan por este Blog. que tengan una muy Feliz Navidad y muy propero Año nuevo, que el proximo año sea mucho mejor que el que ya paso.

Cordialmente.
Victor Hugo Saavedra


--
Atte.
Victor Hugo Saavedra
http://vhspiceros.blogspot.com

lunes, 22 de diciembre de 2008

"is not null" o "<> Null" en Sql Server

Trabajando con NHinbernate. mapeando unas clases, guardaba unos datos y hacia esta consulta para ver si estaba bien:


select * from table where campo <> NULL;


pero no me arrojaba los datos que queria y luego darle y darle vueltas hice esta consulta.

select * from table where campo is not NULL;


y ahi me di cuenta que el mapeo de Hibernet, y los cambios que habia hecho estaban bien. perdi toda una mañana de trabajo por esto :(.


Asi no es lo mismo "is not null" o "<> Null", por lo menos en Sql Server

Entonces ahora cada vez que quiera preguntar si un capo no es Null, voy a preguntar por "IS NOT NULL".

En caso de que quiera saber si un campo es null "IS NULL".




--
Atte.
Victor Hugo Saavedra
http://vhspiceros.blogspot.com

Samsung f480

Como muchos saben, ami me gustan muchos los celulares, hace poco cambie mi cel, antes tenia un blackberry 8100(muy buen telefono) pero me lo robaron :( .

Las principales Gracias de este Celular son:
- Pantalla total y completamente Tactil.
- Tiene solo 3 teclas.
- Camara 5mpx
- Memoria Expandible hasta 8G.
- Reproductor Mp3.
- Bluetooth.
- Radio Fm.
- Variedad de gadget o widget.

El Samsung F480 tiene un diseño muy delgado , con menos de 12 mm de grosor y peso de 100 gramos, y una pantalla de 2.8 pulgadas y resolución de 240x320 píxeles que lo ocupa todo.


Cosas no tan Buenas.

- Los Audifonos se conectan donde mismo se conecta el cargador, es decir, no puedes escuchar musica mientras cargas el Cel.
- Reproductor de Mp3 un poco deficiente. Yo tengo toda mi musica ordenadita por artista y album. .el samsung no reconoce bien los artistas y menos los discos. Ademas el orden aliatorio es bastante Deficiente.

Sorprendente.
Lo que mas me dejo Sorprendido es que saque mi primera foto y es de una resolucion 2560x1920 px, es mucho.

Usabilidad.
La usabilidad de este telefono es muy intuitiva, muy rico de usar este telefono. cada vez que precionas la pantalla o una tecla dibujada en la pantalla vibra suavemente. se nota que se procuparon de la experiencia del usuario cuando.

Precio En chile.

En Chile Tanto en Movistar como Entel este telefono cuesta $120.000 con plan. En prepago solo esta en Entel a un precio de $180.000.
En ambas compañia este celular biene con una Micro-SD de 2GB. :)







--
Atte.
Victor Hugo Saavedra
http://vhspiceros.blogspot.com

viernes, 19 de diciembre de 2008

Cambiando los Coleros de Visual Studio










Llevo bastante tiempo trabajando con visual Studio y me aburrieron los mismos colores siempre.

Aqui les dejo 2 imagen de mi visual Studio. encontre por ahi una configuracion parecida a Vi, y modifique algunas cosa.

Ojo que el resaltar la linea actual a lo EClipse, es una propiedad del Resharper.


Aqui esta la configuracion Bajar Configuracion

















--
Atte.
Victor Hugo Saavedra
http://vhspiceros.blogspot.com

martes, 16 de diciembre de 2008

replace all en Javascript

Hace unos dias. ayude aun compañero con un javascript. y me encontre con la sorpresa de que el replace de javascript solo remplaza la primera coincidencia y no sigue buscando en el string.


function replaceAll( text, busca, reemplaza ){
while (text.toString().indexOf(busca) != -1)
text = text.toString().replace(busca,reemplaza);
return text;
}



El ejemplo en particular era que teniamos que sacar todos los puntos de un numero.

>>>replaceAll("123.345.567", ".", "" );
>>"123345567"



De esta forma por ejemplo podriamos convertirlo en un int. pero la funcion es mas generica, remplaza cualquier caracter por otro, ambos pasados como parametros a la funcion.

--
Atte.
Victor Hugo Saavedra
http://vhspiceros.blogspot.com

miércoles, 10 de diciembre de 2008

Musica E

cancion de Eros Ramazzotti cantada con Andrea Bocelli







Para bajar aqui
--
Atte.
Victor Hugo Saavedra
http://vhspiceros.blogspot.com

lunes, 10 de noviembre de 2008

Ver diferencias locales contra Svn con Python.

Cada vez que realizo una mejora o arreglo algo tengo que hacer un documento con los archivos que cambie. como una forma de automatizar esto, entontre una forma de generar esto automaticamente.

para correr hay que tener instalado pysvn
Aqui esta el codigo:

import pysvn
client = pysvn.Client()
changes = client.status('trunk')
print 'Files to be added:'
foo =[f.path for f in changes if f.text_status == pysvn.wc_status_kind.added]
for bar in foo:
print (" "+bar)
print 'Files to be removed:'
foo = [f.path for f in changes if f.text_status == pysvn.wc_status_kind.deleted]
for bar in foo:
print (" "+bar)
print 'Files that have changed:'
foo = [f.path for f in changes if f.text_status == pysvn.wc_status_kind.modified]
for bar in foo:
print (" "+bar)
print 'Files with merge conflicts:'
foo = [f.path for f in changes if f.text_status == pysvn.wc_status_kind.conflicted]
for bar in foo:
print (" "+bar)
print 'Unversioned files:'
foo = [f.path for f in changes if f.text_status == pysvn.wc_status_kind.unversioned]
for bar in foo:
print (" "+bar)


en vez de general el documento redirigo la salida estandar de esta forma:

python changes.py > changes.txt


Aqui dejo mas script de svn y python

--
Atte.
Victor Hugo Saavedra
http://vhspiceros.blogspot.com

martes, 4 de noviembre de 2008

Cambio en el equipo Sale Imagemaker entra Ultragestion.

Este post debi haberlo hecho hace bastante tiempo. mas o menos 2 meses y medio atras.

Como ya muchos saben me cambie de trabajo hace 2 meses deje de trabajar en Imagemaker IT. despues de casi 3 años de trabajo. fui una empresa muy
buena para trabajar aprendi muchas cosas. Aun recuerdo que llege sabiando solo php y un poco de javascript. Tambien me dio mucha pena dejar a amigos y compañeros de trabajo
como leo, Esteban, Ricardo(s), y muchos mas. Pero como dicen por ahi todo cambio es para mejor.

Hablando de conocimiento, aprendi mucha cosas, como Java, Python, Jython, .Net, javascript, hibernet, log4x, etc, etc, etc [no alcance a aprender ruby].
los proyectos en los que estube involucrado con los siguientes:

- Sistema de estadisticas Abastible[PHP].
- Tunel San Cristobal[JAVA, hibernet].
- http://www.globaltrust.cl [.NET, vbscript].[mi primer sitio en .NET].
- http://www.larrainvial.com [.NET].
- Sitio Privado para clientes de larrainvial [.NET].
- Portal de cumbre Fondos Mutuos & incentivos. Web interna de Bci. [PHP].
- Portal de concecionarios de Copec. [PHP].
- Administrador de comunicados & mailing interno para larrainvial [.NET]
- Portal administrador de Calidad y servicio CorpBanca/Banco Condell.[PYTHON,Django]

- Sitio de minipelotas para el mundial de futbol 2006 Copec. [PHP]
-Webmarine sistema de video para Copec . I version(Java,Ejb,WebSphere).
-Webmarine sistema de video para Copec . II version(PYTHON,DJANGO).

Mantenciones.
- ERA. Sistema de encuestas del Bci.[JAVA].
- Sistema de Gestion por competencia de Mutaul. [.NET,c#].


Definitivamente ahora que me doy cuenta hice muchas cosas en Imagemaker. en cada una de ellas de lo mejor de mi. tratando de sacar el mejor producto posible. de la mejor forma.
Con este post cierro la etapa de imit, con los mejores recuerdos. y agredeciando a todos por el apoyo. Digo cierro "laboralmente" a mis amigos de imit, los voy a seguir viendo por mucho tiempo mas.

Actualmente me encuentro trabajando un ultraGestion una empresa de desarrollo del grupo Ultramar. Hasta ahora super bien, me he estado especializando mas aun en .NET, especificamente
c# y patrones de diseños(hecho de menos python:( ),


bueno este seria el post, para darle la bienvenida a ultragestion y agredecimiento a imit por completo(casi-completo) jejejejeje :).

--
Atte.
Victor Hugo Saavedra
http://vhspiceros.blogspot.com

lunes, 3 de noviembre de 2008

como obtener ruta realmente absoluta de un website?

Bueno, yo siempre ponia esto en el web.config. y dependiendo del servidor lo cambiaba.

pero ahi una mejor forma de hacer esto, programaticamente.

public String Getfullsiteroot() {
return HttpContext.Current.Request.Url.Scheme
+ "://"
+ HttpContext.Current.Request.Url.Authority
+ HttpContext.Current.Request.ApplicationPath;
}

De esta forma obtenemos la url absoluta de nuestro website, inclusive sobre que directorio virtual esta siendo ejecutado, tambien subdominio, y si esta por http o https.

--
Atte.
Victor Hugo Saavedra
http://vhspiceros.blogspot.com

martes, 28 de octubre de 2008

Solo por hoy: CrossOver gratis

Ojo que es solo por hoy,, estan dando licencia por un año gratis.

CrossOVer, es una aplicacion mejorada de wine, con la cual podemos correr programas de windows o mac en linux.

pide el tuyo aqui

--
Atte.
Victor Hugo Saavedra
http://vhspiceros.blogspot.com

lunes, 27 de octubre de 2008

Se acuerdan de los Diskettes??

Ayer fui al lider a comprar unas cosas para cocinar un rico Pie de limon :). quedo muy bueno. me encontre con la sorpresa de que vendian diskettes a $990 la casa de 10. que melancolia me bajo. aun recuerdo cuando en el colegio me pedian de esos de 5 1/4. y despues me pedian Diskettes de 3.5 que recuerdos no.

--
Atte.
Victor Hugo Saavedra
http://vhspiceros.blogspot.com

viernes, 24 de octubre de 2008

no mas Mac Mini


Apple ya no producira mas estos equipos. aunque el equipo yo lo encuentro espectacular. me compre uno hace un tiempo(claro que el de primera generacion) en una venta nocturna y me costo super barato.

Al parecer no tuvo la acogida esperada por apple, recordemos que este aquipo se vende sin monitor, ni teclado ni mouse.

http://es.wikipedia.org/wiki/Mac_mini

--
Atte.
Victor Hugo Saavedra
http://vhspiceros.blogspot.com

jueves, 16 de octubre de 2008

El señor Molina

Con la participacion de kike morande, ernesto Belloni y patty cofre, jejejeje ta muy bueno.





--
Atte.
Victor Hugo Saavedra
http://vhspiceros.blogspot.com

viernes, 10 de octubre de 2008

Ring!!!! te ha llegado un mensaje

Ayer mi compañero Alex en la U. me paso un mp3. esta muy bueno me mato de risa cada que suena.

aqui se los dejo. Ojala les guste.







lo pueden descargar desde aqui

--
Atte.
Victor Hugo Saavedra
http://vhspiceros.blogspot.com

Occhi Di Speranza / ojos de esperanza







Italiano

Tu che mi vuoi restare accanto
fino all'ultimo momento
tu non parli mentre qui

qui
una lacrima si impiglia
nella rete delle ciglia
e rimane ferma lì
col timore di cadere
non si vuole far vedere
da nessuno nè da te
anzi quando me ne andrò
lo farò con un sorriso
così luce resterà
nei miei occhi appena offerti
a chi non li ha mai aperti
ma ben presto lo farà
e allora sì


gli occhi miei vedranno ancora
dietro gli alberti l'aurora
cha dal buio salirà


e vedranno infinità
di ragazzi e di colori
in un'unica città
grande quanto grande è
questo sguardo di speranza
che ho di rivedere te
e poi vallate sterminate
incredibili stellate
tutto questo i miei occhi
lo vedranno come prima
e se poi ti incontreranno
rideranno perchè allora
riconosceranno i tuoi


Español

tù, que conmigo estas viviendo
estos ùltimos momentos
no te quiero ver llorar

no, que esa làgrima salga
que se quede, que no caiga
no lo quiero ver rodar

con el miedo que tù tienes
como hacer que te consueles
que lo veas como yo

porque cuando diga adiòs
tù veràs una sonrisa
y mi luz se quedarà
en mis ojos escondida
para otro que en su vida
nunca viò la claridad
lo quiero asì

si, y podràn mirar de nuevo
ese sol que allà en el cielo
entre nubes brillarà, si

si, y veràn infinidad
de paisajes y lugares
que yo no verè jamàs

grande, grande, grande es
la mirada de esperanza
que te estoy, contando aquì, si
porque puede ser que un dia
increìble fantasìa
todo esto, esto mis ojos
lo veràn por vez primera
y si alguna vez tropiezan
con los tuyos, se sorprendan
de reconocerte a ti



--
Atte.
Víctor Hugo Saavedra P.
http://vhspiceros.blogspot.com

jueves, 9 de octubre de 2008

"function is not defined" en Firefox

Bueno el titulo no dice mucho verdad.
lo que pasa es lo siguiente por ejemplo tengo la siguiente funcion en
x archivo, por ejemplo "script.js"

function foo(bar){
alert(bar);
return bar;
}

hasta ahi todo bien, es una funcion toda muy simple(de hecho no tiene
ningun sentido. incluyo el archivo a mi pagina y en explorer funciona
bien. pero en firefox me dice
"foo is not defined ".

Este problema lo he visto por lo menos un par de veces. la forma de
incluir el archivo en la pagina esta



<script language="javascript" type="text/jscript" src="script.js"></script>

cuando deberia ser :



<script language="javascript" type="text/javascript" src="script.js"></script>

lo mismo si queremos definir la funcion en la misma pagina



<script language="javascript" type="text/javascript">

function foo(bar){

alert(bar);

return bar;

}

</script>

JScript != JavaScript

por alguna razon IE. si entiende que JScript, en realidad es un javascript.

NOTA: la culpa no la tenie Firefox, nosotros deberiamos tener mas
cuidado cuando incluimos o declaramos un js, ya sea externo o no.


--
Atte.
Víctor Hugo Saavedra P.
http://vhspiceros.blogspot.com

martes, 7 de octubre de 2008

Humor Grafico























Las encontre muy buena, son de un tipo llamado alberto Mont, sube un caricatura todos los dias, Aqui esta el link


--
Atte.
Victor Hugo Saavedra
http://vhspiceros.blogspot.com

lunes, 6 de octubre de 2008

Programando en C. Parte III

Estoy saliendo de un control en la U. de C. Aqui deje el ejercicio. si bien no segui los consejos que me ha dicho Daniel por el poco tiempo, de hecho faltan bastantes validaciones y esas cosas.

me imagino que la idea de estos control es evaluar la logica, mas que validaciones.


typedef struct product {
int codigo;
char nombre[50];
char laboratorio[50];
int cantidad;
int precio;
}producto;
void lb();
void ingresar();
void mayor();
float promedio (producto prod[]);
producto productos[400];
int cont = 0,sw=0;

int main(){
char op;
do{
system("cls");
lb();
printf ("\n1.- Ingreso(A)");
printf ("\n2.- Mayor(B)");
printf ("\n3.- Promedio(C)");
printf ("\n0.- Salir");
op = getch();
if (op=='1')ingresar();
if (op=='2')mayor();
if (op=='3'){
float prom = promedio(productos);
printf("\n\n el promedio de todos los productos es \"%f\"",prom);
getch();
}
}while (op!='0');
}

void ingresar(){
if (sw==0){
producto p = {0,"nombre1","laboratorio1",20,1000};
productos[cont] = p;
cont++;
producto p2 = {1,"nombre2","laboratorio1",30,2000};
productos[cont] = p2;
cont++;
producto p3 = {2,"nombre3","laboratorio1",400,3000};
productos[cont] = p3;
cont++;
producto p4 = {3,"nombre4","laboratorio1",50,4000};
productos[cont] = p4;
cont++;
producto p5 = {4,"nombre5","laboratorio1",60,5000};
productos[cont] = p5;
cont++;
printf("\n\nLos Datos Fueron Guardados Satisfactoriamente.");
}else{
printf("\n\nNo se pueden cargar los datos, ya existian datos...");
}
getche();
sw=1;
}

void mayor(){
int i,cantMayor = productos[0].cantidad,indice=-1;
for (i=1;i < cont;i++){
if (cantMayor < productos[i].cantidad){
indice = i;
cantMayor = productos[i].cantidad;
}
}
printf("\n\n El producto que mas se retite es \"%s\" con una cantidad de \"%d\"",productos[indice].nombre,productos[indice].cantidad);
getche();
}
float promedio (producto prod[]){
int i,suma=0;
for (i=0;i < cont;i++){
suma += prod[i].precio;
}
return suma/cont;
}

void lb(){
fflush(stdin);
fflush(stdout);
}


--
Atte.
Victor Hugo Saavedra
http://vhspiceros.blogspot.com

Se acabo el Impuesto

Asi es como dice el titulo se acabo el impuesto de timbres y estampillas.  Estos eran de $163 por cada transaccion.

Esto es a Contar del 1 de obtubre del 2008, creo que es para todos los bancos. Ami me llego una notificacion del Banco de Chile y de corpbanca.







--
Atte.
Victor Hugo Saavedra
http://vhspiceros.blogspot.com

viernes, 3 de octubre de 2008

Integrar Visual Studio con Svn


Todos Sabemos que Svn es mucho mejor que soursafe de Microsoft,

bueno yo antes solo usaba el tortoiseSvn, pero he encontrado 2
plug-ins para Visual Studio para que Svn se integre. la gracia de
estos 2 es que en "solucion Explorer" nos muestra de distinto color
los archivos que hemos modificado, podemos hacer un commit,update,
revert sin necesidad de salir de nuestro Visual Studio.


VisualSvn y AnkhSvn:

VisualSvn no es gratis, AnkhSvn es gratis.
VisualSvn es mucho mejor tanto visual como funcionalmente.





--
Atte.
Víctor Hugo Saavedra P.
http://vhspiceros.blogspot.com

jueves, 2 de octubre de 2008

Encuentro Linux 2008



Una de las mas importantes conferencias de linux y openSource de
nuestro pais se llavara acabo el 23 y 24 de Octubre en la Universidad
de Concepción.

Van a haber varios expositores importantes (de UIntel, Mandriva).

Ademas estara amigo Leo Soto. Que realiza una charla sobre Django.


Programa: http://2008.encuentrolinux.cl/index.php?option=com_content&task=view&id=14&Itemid=29

Inscripciones: http://2008.encuentrolinux.cl/index.php?option=com_content&task=view&id=24&Itemid=68


--
Atte.
Víctor Hugo Saavedra P.
http://vhspiceros.blogspot.com

miércoles, 1 de octubre de 2008

Comparación del Iphone


Me mate de la risa cuando lo vi, lo posteo Willy Coyote en el mmug aqui
--
Atte.
Victor Hugo Saavedra
http://vhspiceros.blogspot.com

martes, 30 de septiembre de 2008

Comandos de linux en Windows

Hace un tiempo buscando y buscando encontre un conjunto de
commandos(aplicaciones) linux para windows. llamada UnxUtils
son bastantes comandos los que tiene, Aqui aparace la lista de
comandos migrados http://en.wikipedia.org/wiki/UnxUtils

Desde http://unxutils.sourceforge.net/ lo pueden descargar

para mi fue muy util como para usar los comandos :
- tail (http://es.wikipedia.org/wiki/Tail)
- wget
- ls
- etc.

Para instalar solo tienen que descomprimirlo, eh instalarlo y copiar
todo en \windows\system32 o en X Directorio y cambiar las variables de
entorno(path) de windows-

--
Atte.
Víctor Hugo Saavedra P.
http://vhspiceros.blogspot.com

lunes, 29 de septiembre de 2008

Programando en C. Parte II

El sabado tuve clases de C. en el ramo de programacion, y tengo que hacer un trabajo como mi segunda catedra.

me encontre con la complicacion que no sabia como validar si un numero que me ingresaban por pantalla era un numero.

lo solucione de esta forma, aunque me imagino que debe haber mejores formas de hacerlo

defini esta function

int myisDigit(char cadena[]){
int i;
char letra;
for (i=0;i < strlen(cadena);i++){
letra=cadena[i];
if (letra<47 || letra>58){
return 0;
}
}
return 1;

}

y despues la llamo para validar, en este caso es una edad.

char edad[20];
do{
do{
fflush(stdin);gets(edad);
}while (myisDigit(edad)==0);
per.edad = atoi(edad);
printf ("%d",per.edad);
}while ((per.edad<0)>100));


como podran darse cuenta edad es un char de 20, y per.edad es un int.

--
Atte.
Victor Hugo Saavedra
http://vhspiceros.blogspot.com

viernes, 26 de septiembre de 2008

String.format

String.Format
Una Forma elegante de concatenear String y algo mas.

Por lo general en visual Basic hacia algo por el estilo
Dim nombre as "victor"
Dim foo as string = "hola mi nombre es " + nombre + "."

el resultado de esto es: Hola mi nombre es Victor.

se bastente feo verdad.
mejor usar String.format, se ve mas bonito y es mas mantenible
string nombre = "Victor";
string foo = string.Format("hole mi nombre es",nombre);

el resultado de esto es: Hola mi nombre es Victor


String.format recibe multiples argumentos, algo parecido a printf de C.

No tan solo sirve para concatenar, si no que tambien para dar formatos a fechas y numeros.

por ejemplo:
string.format("Hoy es {0:F}", DateTime.Now);


Aqui les dejo una referencia.



--
Atte.
Victor Hugo Saavedra
http://vhspiceros.blogspot.com

Que hora es?


miércoles, 17 de septiembre de 2008

buscar columnas en todas las tablas Sql Server

me vi en la necesidad de buscar en todas las tablas de una base de datos por un comodin ya que no conocia bien el modelo de la base de datos.
aqui les dejo el sql.
SELECT  sysobjects.name AS table_name, syscolumns.name AS column_name,
           systypes.name AS datatype, syscolumns.LENGTH AS LENGTH
FROM       sysobjects INNER JOIN
               syscolumns ON sysobjects.id = syscolumns.id INNER JOIN
               systypes ON syscolumns.xtype = systypes.xtype
WHERE     (sysobjects.xtype = 'U') 
                and (UPPER(syscolumns.name) like upper('%myFieldName%'))
ORDER BY sysobjects.name, syscolumns.colid



Solo tienen que cambiar donde dice "myFieldName" por el nombre de la columna que desean buscar.

--
Atte.
Victor Hugo Saavedra
http://vhspiceros.blogspot.com

viernes, 5 de septiembre de 2008

Chistes Fomes

Como muchos ya saben soy muy fome, para dejar constancia de esto aqui dejos algunos chiste que me se y que encontre por ahi, y parto con el mejor de todos, jejejejeje :)


Un hombre llega a pedir trabajo en una ferretería,
el administrador le dice:

OK, le puedo dar el empleo pero si usted habla inglés.
Claro, yo hablo inglés.
Demuéstrelo y atienda a ese cliente que está entrando.

Cliente: ¿Hay ampolletas?

Solicitante: Welcome mister Polletas, I'm Jorge.

__________________________________________________________
Kellogs está triste
¿Por qué Kellogs está triste?
Porque Choco Crispy.

¿Cómo te diste cuenta?
Por zu caritas.
__________________________________________________________

iban 2 chanchitos caminando por la calle
y pasan por al frente de una carniceria y leen en un cartel
"hoydia dia del Cerdo" y los chanchitos se abrazan.....

__________________________________________________________
un dia iba un niñito que se llamaba pastel,
cruzando la calle lo atropellaron..
quedó la crema...

__________________________________________________________
Que le dijo un perro a otro perro???
- nada por que los perros no hablan.

__________________________________________________________

Llega Jose a la casa de su suegro.. y le dice.. hola... mi nombre es Jose,
soy paraguayo y vengo para casarme con su hija.. el suegro le dice enojado y
sorprendido.. !!!PARA QUE!!!!???.. y Jose le dice.. : Paraguayo... Plop.!!!




--
Atte.
Victor Hugo Saavedra

miércoles, 3 de septiembre de 2008

Agregar Javascript desde un masterPage (Ruta Relativa)

Cual les la dificaltad de esto.
basicamente son las rutas. ya que si una pagina ucupa un masterPage, la ruta es de la pagina no del master page, es decir podemos tener n paginas que cuelgan del mismo masterPage sin importar la ruta en la que se encuentrar.

Primero, en nuestra clase de nuestro masterPage debemos incluir un atribito publico.

public string urlStript = string.Empty;


Luego en el page load buscamos la url, real donde se encuentre, cosa de que nos encuentre la ruta relativa del recurso.

urlStript = ResolveClientUrl("~/Resources/scripts/urlStript .js");


Y por ultimo simplemente incluimos en el aspx(master page) el script.
<script language="javascript" type="text/javascript" src="<%# urlStript  %>"></script>
La principal ventaje de esto, es que solo tenemos que el incluir nuestros js solo una vez, o una vez por masterPage que tengamos.


CSS:
para los Css el tratamiento es muy distinto uno solo agrega en el head(siempre y cuando uno le diga el head runat="server") el automaticamente va a buscar el recurso de la siguiente forma:


<head runat="server">
<title>myPage</title>
<link href="~/Resources/styles/estilos.css" rel="stylesheet" type="text/css" />
</head>


esto solo funciona para <link> css no para javascript no se por que.

--
Atte.
Victor Hugo Saavedra

doblandole un poco la mano a los updatePanel

como muchos ya saben yo uso mochikit (me acomoda bastante).

tuve que hacer un un javascript para cuando carga la pagina. aumentar el tamaño de un iframe, todo bien hasta ahi:

addLoadEvent(function(){
try{
var alto = parent.parent.window._altoContent;
alert(alto);
alto = alto -20;
$("myFrame").style.height = alto+"px";
}catch(e){
logError(e);
}
});


addLoadEvent: viene de mochikit, esto ejecuta las instrucciones cuando todo el contenido de la pagina ha sigo cargado.

como dije hace un rato todo bien, la cosa es que se estaba usando un menu que contenia un updatePanel y el iframe estaba dentro de este updatePanel.

Aqui dejo un script como script de como intersectar una llamada y termino de una llamada de un updatePanel:

 Sys.WebForms.PageRequestManager.getInstance().add_beginRequest(beginRequestHandle);
Sys.WebForms.PageRequestManager.getInstance().add_endRequest(endRequestHandle);
function beginRequestHandle(sender, Args)
{
alert("Begin Request Handle called.");
}
function endRequestHandle(sender, Args)
{
for(m in Args.get_response())
{
if((m.indexOf("get_") == 0)&&(m!="get_object"))
{
alert(m + ": " + eval("Args.get_response()." + m + "()"));
}
}

alert("End Request Handle called.");
}



Aqui esta el script general, ustedes ven que funcion o instrucciones javascript deberian usar.

Ojala les sirva
--
Atte.
Victor Hugo Saavedra

martes, 2 de septiembre de 2008

Google Chrome nuevo navegador y de Google

Hoy se lanzo Oficialmente google Chrome, yo lo instale y me di cuenta de las siguientes cosas interesantes:

  • webkit integrado, los usuarios de mac ya lo conoces, es algo asi como firebug de firefox.
  • deseño mas bien minimalista pero bastante intuitivo
  • y rapidisimo todo funciona bastante rapido por lo mejos javascript.
de Aqui lo pueden descargar http://www.google.com/chrome

viernes, 29 de agosto de 2008

Configurando el log en NHibernate

NHibernate usa log4Net para hacer log.

todos esto me suena parecido a java
NHibernate -->Hibernet
log4Net -->log4J


bueno necesitaba ver que consultas hacia NHibernate a la base de datos. para hacer esto tuve que agregar las siguientes lineas al Web.config dentro del tag log4NET


 <appender name="NHibernateFileLog" type="log4net.Appender.RollingFileAppender">
<file value="C:\\logs\\nhibernate.log"/>
<appendToFile value="true"/>
<rollingStyle value="Size"/>
<maxSizeRollBackups value="10"/>
<maximumFileSize value="100KB"/>
<staticLogFileName value="true"/>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%d{HH:mm:ss.fff} [%t] %-5p %c - %m%n"/>
</layout>
</appender>
<logger name="File">
<level value="DEBUG"/>
<appender-ref ref="LogFileAppender"/>
</logger>
<logger name="NHibernate.Loader.Loader" additivity="false">
<level value="DEBUG"/>
<appender-ref ref="NHibernateFileLog"/>
</logger>
<!-- Setup the root category, add the appenders and set the default priority -->
<root>
<priority value="DEBUG"/>
<appender-ref ref="console"/>
</root>





de esta forma ahora puedo ver las consultas que hace, aunque ahora me queda averiguar como instalar un tail para windows, ya que son muchas lineas.


--
Atte.
Victor Hugo Saavedra


Accediando al contenido de un Iframe

Siempre me e preguntado como podemos acceder mediante javascript al dom, de un documento cargado en un iframe, aqui les dejo una funcion


function getDocFrame(idFrame){
var myIFrame = document.getElementById(idFrame);
return myIFrame.contentWindow.document;
}


de esta forma llamamos a la funcion con el id del iframe y ya modemos trabajar con el contenido de esta forma


doc = getDocFrame(idFrame);
doc.getElementById("myid").value="hola";
//o directamente
getDocFrame(idFrame).getElementById("myid").value="hola";


--
Atte.
Victor Hugo Saavedra


jueves, 28 de agosto de 2008

Failed to access IIS metabase.

Hoy dia me salio este error
Failed to access IIS metabase.

Cuando trataba de ver una pagina que estaba configurada en el IIS.

como descripcion del error era la siguiente:

System.Web.Hosting.HostingEnvironmentException: Error en el acceso a la metabase de IIS. La cuenta del proceso usado para ejecutar ASP.NET debe tener acceso de lectura a la metabase IIS (p. ej., IIS://servername/W3SVC). Para obtener más información acerca de la modificación de los permisos de la metabase, consulte http://support.microsoft.com/?kbid=267904.


Causa:
Instale el o los framework antes que el IIS.

Solucion:
reinstalar los framework pero es una lata. hay un comando que esta dentro de los directorios de los framework que lo que hace es registrarse dentro del iis.
aqui les dejo el comando
C:\WINDOWS\Microsoft.NET\Framework\<version>\aspnet_regiis.exe -i

donde <version> es la version del framawork

--
Atte.
Victor Hugo Saavedra


lunes, 11 de agosto de 2008

Error en mi cuenta de Gmail


Hoydia en x momento del dia me salio este error en la pagina de gmail cuando ingresaba mis datos.
Esto sigue igual ya llevo como una o dos horas sin correo. que curioso.


Alguien mas tiene este problema ??

sábado, 2 de agosto de 2008

Programando en C

Actualmente estoy en clases, cuando digo en clase me refiero ahora sabado a las 10 de la mañana, muerto de sueño.

nos pidieron hacer el tipico ejercicio de la seria de fibonacci, y me costo un mundo desarrollarlo en C.

Aqui lo dejo por si a alguien le interesa, ase mucho tiempo que no hacia nada en C.


int fibonacci (int valor){
if (valor==0) return 0;
if (valor==1) return 1;
if (valor>=2){
return fibonacci (valor-1) + fibonacci(valor-2);
}
return 0;
}
int main(){
int i,hasta=0;
char tecla;
clrscr(); /*limpia la pantalla*/
printf("Cuantos numeros en la secuencia de fibonacci desea mostrar");
scanf("%d",&hasta);
for (i=0;i< hasta;i++){
printf("%d\n",fibonacci(i));
}
printf ("Presione una tebla para terminar el programa.....");
tecla = getche();
return 0;
}

--
Atte.
Victor Hugo Saavedra
http://vhspiceros.blogspot.com

jueves, 31 de julio de 2008

cambio en la Encuesta

Hace bastante tiempo que tenia la misma encuesta, y ademas estaba vencida, asi que cree otra para los que quieran votar

¿En que Lenguaje te gusta mas programar?

--
Atte.
Victor Hugo Saavedra

viernes, 25 de julio de 2008

asignar un xml a un GridView


Dim xmldata As XmlDataSource = New XmlDataSource()
Dim xmldocument As XmlDocument = New XmlDocument
xmldocument.Load("C:\muestra.xml")
xmldata.Data = xmldocument.innerXml
Dim mygridView As GridView = New GridView
mygridview.AutoGenerateColumns=True
mygridView.DataSource = xmldata
RadGrid1.DataBind()
form1.Controls.Add(mygridView)



donde el xml es el siguiente:

<myXml>
<Row column1="nombre1" column2="0"/>
<Row column1="nombre2" column2="10"/>
</myXml>


--
Atte.
Víctor Hugo Saavedra
http://vhspiceros.blogspot.com

miércoles, 18 de junio de 2008

Descarga Firefox 3.0 desde ahora.. yaaa..!!





Si quieres formar parte del Download Day e intentar romper el
récord Guinness del software más descargado en 24 horas,
qué esperas para descargar ahora mismo la última versión disponible del
navegador Firefox, la 3.0. Para ver sus nuevas características,
Visita el siguiente enlace: http://www.mozilla-europe.org/es/firefox/features/

Pare Descargar AQUI

lunes, 16 de junio de 2008

Redefinir getElementById

muchas veces mi se me olvida cuales son en mayusculas y cuales en minusculas.
por eso defini la funcion "$" que es lo mismo que "document.getElementById", de hecho
internamente lo llama.



$ = function (id){
return document.getElementById(id)
}


si no les gusta con el $, pueden colocar el nombre que quieran


getElement = function (id){
return document.getElementById(id)}



OJO: que para los que usan mochikit, estas funciones ya estan definidas,
con el mismo fin, es decir, ya son un document.getElementById.

--
Atte.
Victor Hugo Saavedra
http://vhspiceros.blogspot.com


miércoles, 11 de junio de 2008

Problema con CalendarExtender de AjaxControlToolkit




hace un tiempo nos dimos cuenta de un problema con la libreria,
como se pueden dar cuenta en la imagen, faltan dias.

despues de mucho rato, llege a la conclusion de que era un problema de css.

Descripcion del problema:

Me di que el calendario tenia asignado un css indirectamente,
ya que en la hoja de estilos se usaban selector y clases heredadas.

estos son los css que tenian problema:


.selector_01 table {margin-left:10px;}
.selector_01 table td {padding:4px 4px 10px 0px}


ya que el calendario estaba inserto en un div, que tenia la clase selector_01,
y el calendario al momento de renderizarse en el cliente es una tabla, entonces de
esta forma hereda el calendario hereda los margin y padding que estan definidos
en la hoja de estilos.

--
Atte.
Victor Hugo Saavedra
http://vhspiceros.blogspot.com

AndAlso en vbscript?????

AndAlso en vbscript?????

como ya varios saben , vbscript no tiene un "cortafuego" por defecto,
que la mayoria de los lenguajes tiene.

por ejemplo JAVA

persona = null;
if (persona != null && persona.nombre ="Victor"){


este codigo esta bien para Java, ya que si persona es nulo no evalua
la segunda Expresion, y por ende no se cae por un nullPointerExecepction.

Ahora vamos a nuestro querimo VbScript.
El mismo Ejemplo

Dim persona as persona = nothing
If not persona is nothing and persona.nombre ="Victor" then
End If


Este codigo lamentablemente se cae, por que apesar de que no se
cumple la primera expresion, igual evalua la segunda. de Esta Forma tenemos un
bonito nullPoinerException


como hay que hacerlo en VBScript.


Dim persona as persona = nothing
If not persona is nothing andAlso persona.nombre ="Victor" then
End If



De Esta forma con el AndAlso, le decimos al framework
que si la primera expresion no se cumple, no es necesario que evalue la segunda.

Dim persona as persona = nothing
If not persona is nothing andAlso persona.nombre ="Victor" then
End If


pregunta:
¿por que esto no vendra por defecto en Visual Basic Script?
creo que seria mas comodo si el and lo hiciera automaticamente.
por si alguien sabe.

--
Atte.
Victor Hugo Saavedra
http://vhspiceros.blogspot.com

viernes, 25 de abril de 2008

Summer Of Code. Felicitaciones Leo.

Como muchos ya saben google tiene un programa para estudiantes que se llama "summer of code" (codigo de verano). y mi companero y amigo Leo Soto. postulo y aprobaron su proyecto ya tiene un tutor y todo.
Pero vamos por parte que es summer of Code

- summer of code: para estudiantes que quieren trabajar en el verano en proyectos OpenSource. Ojo que cuando en EEUU nosotros estamos casi entrando al invierno.
- google incentiva pagando por estos proyectos, las cifras no las tengo muy claras.

Proyecto de leo Soto:

Como muchos sabemos al leo le gusta mucho python y el framework "Django". ambos 2 a mi me gustan mucho pero no e tenido mucho tiempo para
volver a programar en python (toy 100% .NET :( ).

Tratara de correr DJango sobre jython(python corriendo en la Jvm de Java), de esta forma podremos hacer proyectos con django y empaquetarlo en un War.
y no solo si no que podremos usar nuestras clases Java desde Django.

Bueno para mas detalles del Proyecto de leo visiten este link

Aqui leo detalla un poco al parecer(esta en ingles) Aqui


Y reitero Felicitaciones leo. Ojala mas adelante pueda participar :).

viernes, 11 de abril de 2008

colocar acentos en el subject de un mail

Tuve que desarrollar un programa que enviaba mail a distintas personas, pero me encontre con varios problemas de encoding. el principal fue el problema al colocar acentos en el subject del mail.

para sorpresa mia encontre en un pagina que hay que codificar el subject para que tome caracteres especiales como acentos y ennes(tengo el teclado en ingles).

este programa lo estaba haciendo en c#. y para que muestre acentos hay que codificarlo en base64 de la siguiente forma:


subject = "=?ISO-8859-1?B?" + Convert.ToBase64String(System.Text.Encoding.Default.GetBytes(texto))+"=?=";


ademas de codificar el string, tenemos que pasar esto "=?ISO-8859-1?B?" al inicio inicio del string, para que el que
despliga el correo sepa que el asunto esta codificado indicandole la codificacion en que se codifico.


Nota: en php tambien hay funciones para manejar la codificacion en base 64



domingo, 6 de abril de 2008

Alternativas a Visual Studio

claro que visual estudio es un muy buen ide, para desarollar con .net en sus distintos lenguajes (aunque en lo personal me quedo con Eclipse). bueno uno de los principales problemas de visual Studio es que consume muchos recursos, por eso busque alternativas aqui detallo 2 opciones que encontre.

WebMatrix(http://www.asp.net/webmatrix/download.aspx):
este es super rapido, y consume muy pocos recursos, es ideal para cuando uno empieza a programar en .net.
Caractetisticas principales:

  • No usa un archivo de proyecto o solucion, solo maneja archivos lo que hace que sea mas rapido.
  • tiene su propio servidor de desarrollo, como visual Studio, ademas nos da la opcion de crear o usar un directorio Virtual de CSS.
  • permite instalar plugins o complementos
  • permite crear propios complementos, ya que podemos importar las librarias o programar nuestros propios plugins

Que deberian mejoran:

  • No posee preduccion de texto, o intelligense como visual studio. muchas veces me paso y me sigue pasando que escribo mas los nombres de las variables y solo me doy cuenta cuando corro la aplicacion.
  • no tiene manejo si manejamos nuestro aspx y nuestro codigo en un aspx.vb, Webmatrix si hacemos click sobre un control, el codigo lo agrega automaticamente en la misma pagina aspx.
  • creo que seria muy util tener un listado de funciones y procedimientos que tenemos en el archivo que estamos editando.

resumiendo, Web-matrix es tiene varias gracias pero no es muy bueno si tenemos muchos proyectos relacionados, de hecho no compila proyectos (DLL). pero insisto es super bueno, si queremos partir, o simplemente editar un par de archivos.

SharpDevelop(http://www.icsharpcode.net/OpenSource/SD/):

Bastante mejor que el anterior, este si maneja archivos de solucion y proyecto. tiene una interfaz mucho mas intuitiva que web-matrix. y sigue siendo mas liviano que visual Studio(auque mas pesado que WebMatrix)

Principales caracteristicas:
  • Multiples lenguajes dentro de los cuales esta c#, vbscript, etc.
  • No tiene problemas con soluciones con multiples proyectos.
  • Interfaz muy intuitiva y amigable.
  • preduccion de texto.
  • podemos ir a la definicion de una funcion
  • podemos buscar de donde es llamada un funcion

Que deberian Mejorar:

  • como yo hay muchos que desarrollamos con vbscript proyectos Web. este no maneja proyectos web con vbscript, si lo maneja con c#.
  • no tiene un debug, aunque hay forma de hacer un debug con visual-debug (o algo asi). aunque no es muy facil hacerlo.

como conclusion, otro visual Studio no encontraremos, pero si podemos encontrar pequeñas herramientas para no tener que abrir visual estudio solo para cambiar un par de cosas.

--
Atte.
Victor Hugo Saaveda
http://vhspiceros.blogspot.com

jueves, 3 de abril de 2008

ocultar prompt de ListSearchExtender ajaxToolkit

Me surgio la necesidad de tener que ocultar el prompt de un ListSearchExtender.

para hacer eso tenemos que definir un clase css. de este forma

.PromptCssClass{display:none;}

despues le asignamos de al atributo o propiedad "PromptCssClass" del ListSearchExtender la clase css que generamos. deberia quedar asi.


<ajaxToolkit:ListSearchExtender id="lse_MyPais" runat="server" TargetControlID="cmbPais" PromptCssClass="PromptCssClass">
</ajaxToolkit:ListSearchExtender>


y listo, el prompt ya no aparecera.

lunes, 10 de marzo de 2008

mover elementos de un listBox



Varias veces eh visto algo como la imagen que esta a la derecha. esto por lo general lo hacia en javscript. ahora me propuse hacerlo a atraves de .NET sin nada de javascript.

Aqui dejo el codigo:
    Sub boton1_Click(sender As Object, e As EventArgs)
dim ElementosEliminar as Arraylist = new Arraylist
for each item as ListItem in List1.Items
If item.Selected Then
List2.items.Add(New ListItem(item.text,item.value))
ElementosEliminar.add(item)
End If
next
RemoveElements(List1,ElementosEliminar)
End Sub

Sub boton2_Click(sender As Object, e As EventArgs)
dim ElementosEliminar as Arraylist = new Arraylist
for each item as ListItem in List2.Items
If item.Selected Then
List1.items.Add(New ListItem(item.text,item.value))
ElementosEliminar.add(item)
End If
next
RemoveElements(List2,ElementosEliminar)
End Sub


private function RemoveElements( Byref ListBox as ListBox,byval Elements as Arraylist)
for each item as ListItem in Elements
listBox.items.remove(item)
next

Se realizo una funcion RemoveElements, para no tener problemas con los indices.


Este es el codigo en el aspx:



  <table>
<tbody>
<tr>
<td>
<asp:ListBox id="List1" runat="server" SelectionMode="Multiple" AutoPostBack="false">
<asp:ListItem Value="valorhola">hola</asp:ListItem>
<asp:ListItem Value="valorChao">chao</asp:ListItem>
<asp:ListItem>hola1</asp:ListItem>
<asp:ListItem>hola2</asp:ListItem>
<asp:ListItem>hola3</asp:ListItem>
</asp:ListBox>
</td>
<td>
<asp:button id="boton1" onclick="boton1_Click" runat="server" AutoPostBack="true" text=">>"></asp:button>
<br />
<asp:button id="boton2" onclick="boton2_Click" runat="server" AutoPostBack="true" text="<<"></asp:button>
</td>
<td>
<asp:ListBox id="List2" runat="server" SelectionMode="Multiple"></asp:ListBox>
</td>
</tr>
</tbody>
</table>

viernes, 15 de febrero de 2008

Accediendo desde Webpart a los controles

Webparts es la propuesta Microsoft de bea-Portal, para hacer sitios.
bueno la mayor gracia de Webpart es que te da la funcionalidad de arrastrar los paneles por la pagina, y estas son permanentes en el tiempo. como el tiempo es poco y estoy por irme de vacaciones(yupi) en otra ocasion hablere mas del concepto, beneficios y contras de webparts.

Nacio de saber como podemos hacer para que webparts cambie un estado en un userControl o control de usuario para asi poder hacer una accion, dependiendo del valor.


primero en un WebpartsZone, arrastramos desde la parte derecha (solucion Explorer) nuestro UserControl (ojo que hablo de las que tienen extension ACSX).

a nuestro control le definimos un atributo y un property, para que webparts puedas modificar el atributo.

Este es el codigo en el aspx

<%@ Control Language="VB" AutoEventWireup="false" CodeFile="WebUserControl.ascx.vb" Inherits="WebUserControl" %>
<table>
<tr><td colspan="2">
<asp:Label ID="TituloLbl" runat="server" Text="Titulo"></asp:Label></td></tr>
<tr>
<td>
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
</td>
<td>
<asp:Button ID="Button1" runat="server" Text="Button" />
</td>
</tr>
</table>


Y en nuestro asp.vb tenemos lo siguiente:
Partial Class WebUserControl
Inherits System.Web.UI.UserControl
Private _Titulo As String = String.Empty
<WebBrowsable()> _
<Personalizable()> _
Public Property tutulo() As String
Get
Return Me._Titulo
End Get
Set(ByVal value As String)
Me._Titulo = value
Me.TituloLbl.Text = value

End Set
End Property
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
End Sub
End Class


esta listo el primer paso. de esta forma webparts podra acceder al property de nuestro userControl, ojo que el WebBrowsable y Personalizable son super importantes si no estan webparts, no sera capaz de leer el property.

Si se fijas en SET, no solo cambia el valor de _Titulo, si no que tambien realiza la accion de cambiar el texto de un label.




Segundo paso

Tenemos que agregar un editorZone y dentro un PropertyGridEditorPart, este es el que es capaz de leer las propiedades de los controles y modificarlas.

A mi me quedo un codigo de este estilo.

<asp:EditorZone ID="EditorZone1" runat="server">
<ZoneTemplate>
<asp:PropertyGridEditorPart ID="PropertyGridEditorPart1" runat="server" />
</ZoneTemplate>
</asp:EditorZone>


Entonces cuando a webparts le digamos que se muestre en modo de edicion, nos mostrar un panel, donde podremos cambiar todos los varoles que queramos.

Importante
PropertyGridEditorPart solo lee property no lee atributos privados, solo property, ademas estos deben ser publicos.

Haciendo controles anidados


Muchas veces me he preguntado como hacen .Net para anidar los controles. en mis primeras experiencias al desarrollar mi primer control. me fue imposiblee realizar esto.

bueno lo que queremos lograr seria algo como esto:

<cc1:MyControl ID="server"   popUpID="panel1" Title="este es el titulo" >
<cc1:MyControlColumnas label="Nombre Persona" name="nombre" runat="server" Visible=true/>
<cc1:MyControlColumnas label="Edad Persona" name="edad" runat="server" Visible=true/>
</cc1:MyControl>




bueno por parte, como ya sabemos hacer nuestro control, ahora solo tenemos que hacer un una clase extienda de control Builder

  Public Class MyPortalBuilder : Inherits ControlBuilder
Public Overrides Function GetChildControlType( _
ByVal tagName As String, _
ByVal attributes As IDictionary) As Type
If tagName.ToLower() = "MyPortalColumna".ToLower Then
Return GetType(MyPortalColumna)
End If
Return Nothing
End Function
End Class



En este codigo sobre-escribimos el metodo GetChildControlType y le decimos que nos retorne el tipo de nuestro elemento que esperamos.


Pero eso no es todo en nuestra clase del control padre, tenemos que agregar esto.
ControlBuilder(GetType(MyPortalBuilder)), _
actualemten mi declaracion antes de mi clase es la siguiente:
 < _
ParseChildren(False), _
ControlBuilder(GetType(MyPortalBuilder)), _
ToolboxData("<{0}:MyPortal runat=""server"" ID='MyPortal1' >" + vbCrLf + _
"<{0}:MyPortalColumna runat=""server"">" + vbCrLf _
+ "<{0}:MyPortalPortlet runat=""server"" title=""Title"" contentId=""div1""/>" + vbCrLf _
+ "</{0}:MyPortalColumna>" + vbCrLf _
+ "</{0}:MyPortal> ")> _



Pero aun no termina esta tarea, parece tediosa y larga, pero la verdad es que en la practica no lo es tanto este es el ultimo paso.


Definimos una coleccion(en la clase padre) para guardar todos los hijos que esperamos, en mi caso yo utilice un arraylist. y tenemos que sobreescribir un metodo, para que llenemos nuestro Arraylist.

Protected Overrides Sub AddParsedSubObject(ByVal obj As Object)
If TypeOf (obj) Is MyPortalColumna Then
Me._columnas.Add(obj)
End If
End Sub


de esta forma ya tenemos nuestros controles ya listos.

IMPORTANTE

  • Nuestra clase hija tambien tiene que extender de webControl, si no esto no funcionara.

  • en el ultimo codigo(el metodo AddParsedSubObject) "_columnas" es mi attributo de la clase padre.




  • Conclusion

    con esto podemos hacer casi lo que se nos ocurra, podemos recorrer los hijos y leer valores desde ellos de forma trasparente. en mi caso realize una grilla, y dentro de ella tengo una coleccion de columnas, estas columnas le indican a la grilla que valores mostrar.

    jueves, 7 de febrero de 2008

    Activando Eventos con controles desarrollados

    Ya desarrollamos un pequeno control, pero ahora como hacemos para que este vaya al servidor, y ejecute una accion en este, es decir, cuando nosotro hacemos click sobre algo queremos que nuestro control vaya a realizar un metodo en el codebehind.


    Por ejemplo nosotros desarollamos en control llamado customerControl (button) y queremos darle la posibilidad a los desarrolladores que usen este control, de programar un evento, en este caso el evento click.

    manos a la obra.
    Namespace MyControl
    <ToolboxData("<{0}:testControl runat=""server"" ID='testControl1'/>")> _
    Public Class testControl : Inherits Control
    Implements IPostBackEventHandler
    Public Event Click As EventHandler

    Protected Overridable Sub OnClick(ByVal e As EventArgs)
    RaiseEvent Click(Me, e)
    End Sub

    Public Sub RaisePostBackEvent(ByVal eventArgument As String) Implements IPostBackEventHandler.RaisePostBackEvent
    OnClick(EventArgs.Empty)
    End Sub

    Protected Overrides Sub Render(ByVal output As HtmlTextWriter)
    output.Write(("<INPUT TYPE = submit name = " & Me.UniqueID & " Value = 'Click Me' />"))
    End Sub
    End Class
    End Namespace


    Implements IPostBackEventHandler
    nuestra clase de control tiene que ser implementada por esta clase, para que podamos capturar los eventos genrados en el cliente.

    Public Event Click As EventHandler
    con esta linea definimos el evento click de esta forma al hacer soble click sobre el objeto , nos aparerecera el metodo click, el encabezado de ese metodo seria algo asi.
    Protected Sub testControl1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles testControl1.Click

    Protected Overridable Sub OnClick(ByVal e As EventArgs)
    Definimos el metodo un sub (llamado por algunos), ojo que este metodo tiene que ser sobre-escribible(Overridable). esta funcion recibe en E todos los argumentos.

    RaiseEvent Click(Me, e)
    llamamos internamente al evento click, y le pasamos nuestro objeto, es decir, ME o THIS. y los argumentos que nos llegaron como parametros.

    Public Sub RaisePostBackEvent(ByVal eventArgument As String) Implements IPostBackEventHandler.RaisePostBackEvent
    basicamente es un Sub, que es implementado por IPostBackEventHandler.RaisePostBackEvent

    OnClick(EventArgs.Empty)
    llamamos al sub con argumentos vacios.



    En nuestro aspx, al momento de arrastrar el control se despliega lo siguiente:



    en mi caso en el aspx.vb deje lo siguiente:
    Protected Sub testControl1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles testControl1.Click
    MsgBox("este es un click desde un testControl")
    End Sub