sábado, febrero 23, 2008

Gridview con Checkbox

Imaginemos que tenemos un gridview al cual le hemos incorporado una columna con un checkbox, valor el cual querremos recoger para realizar alguna acción si esta o no seleccionado. Pues el código sería el siguiente:

CÓDIGO ASP/HTML:
<asp:GridView ID="grdPersonasWS" Width="400px" DataKeyNames="IdPersonaNeo" runat="server" AutoGenerateColumns="false">
<columns>
<asp:templatefield>
<itemtemplate>
<asp:checkbox id="chkIdPersona" runat="server">
</itemtemplate>
</asp:TemplateField>
<asp:boundfield headertext="Id" datafield="IdPersonaNeo">
<asp:boundfield headertext="Nom" datafield="Nombre">
<asp:boundfield headertext="1r Cognom" datafield="Apellido1">
<asp:boundfield headertext="2n Congom" datafield="Apellido2">
<asp:BoundField HeaderText="Naixement" DataField="FechaNacimiento" HtmlEncode="false"
DataFormatString="{0:dd/MM/yyyy}" />
</columns>
</asp:GridView>

CÓDIGO VB.Net:
For i As Integer = 0 To Me.grdPersonasWS.Rows.Count - 1
If CType(grdPersonasWS.Rows.Item(i).Cells(0).Controls(1), CheckBox).Checked Then
//Acción seleccionadas
else
//Acción no seleccionadas
End If
Next

viernes, febrero 22, 2008

Textbox solo números javascript, validator .net y via código

Muchas veces es necesario bloquear el formato de entrada de algunos textbox o input según programemos en html o asp.net. Para ello tenemos diferentes opciones, bloquearlo via javascript, verificar los datos en el codigo behind de .net una vez ya estamos en server, o utilizar un validator.

JAVASCRIPT:
onkeypress="return soloNumeros(event);"

function soloNumeros(evt)
{
// NOTE: Backspace = 8, Enter = 13, '0' = 48, '9' = 57
var key = evt.keyCode ? evt.keyCode : evt.which ;
return (key <= 40 || (key >= 48 && key <= 57)); }

VALIDATOR:
<asp:regularexpressionvalidator id="RegularExpressionValidator1" runat="server" errormessage="RegularExpressionValidator" validationexpression="\d"></asp:RegularExpressionValidator>


VB.NET:

try{
int i =me.TextBox1.Text;
}
catch{
//No esta bien el formato
}

jueves, febrero 21, 2008

Grabar archivo asp.net

A continuación se detalla como enviar un archivo desde cliente a servidor desde una página web.

CÓDIGO HTML:
<input id="MyFile" runat="server" type="file">

CÓDIGO VB:
'Guardo en el servidor
MyFile.PostedFile.SaveAs(Server.MapPath("/directorio/" & ArchivoServidor)


Atención, el directorio en el cual se escribe, el usuario del servidor web ha de tener permisos de escritura.

miércoles, febrero 20, 2008

Lucene .Net

Esta es una API que permite realizar de manera eficiente búsquedas de texto, al estilo full-text index de SQL Server, con la ventaja, que puede realizar búsquedas semánticas sobre el texto. Un ejemplo sería, buscamos "Informática" y encontrariamos "Informatica,Informática, Informatic, Informatico, Informaticos...".

CONCEPTOS BÁSICOS:
Index: Seria el similar a tabla de BD
Document: Seria el similar a la row de BD
Field: Seria el similar a columna de BD

Un Field tiene diferentes propiedades que detallamos a continuación:
Indexado o no Indexado
Guardado o no Guardado

Tipos de Indexación:
Tokenized: Indexa pasando por el analizador semántico
UnTokenized: Indexa sin pasar por el analizador semántico
No: No indexa
No_Norms: ???

Toda la información con la que trabaja lucene, es de tipo string, por tanto, si queremos guardar números, y lo que es más importante, hacer busquedas sobre estos de tipo BETWEEN hemos de tener en cuenta la longitud de las cadenas a comparar.

CONSULTAS:
AND: +(campo1:valor1) +(campo2:valor2)
OR: (campo1:valor1) || (campo2:valor2)
NOT: +(campo1:valor1) -(campo2:valor2)
BETWEEN: campo:[00001 TO 10000] *es una comparación de strings

Hay complementos para las búsquedas como son los filtros, que no es más que un AND con un valor fijo.

BÚSQUEDAS:
El resultado de una búsqueda es un array de direcciones de memoria con el total de los resultados, sobre estos, se puede realizar la paginación, obteniendo por último el documento de lucene al qual apunta cada apuntador y podiendo retornar la información deseada.

Por defecto, cada búsqueda se va cacheando, y por lo tanto, permitiendo que las búsquedas posteriores se realicen de forma más rápida. No es obligatorio que la búsqueda sea exactamente la misma para optimizar el resultado de las posteriores búsquedas.

PROYECTO LUCENE:
Lucene es un proyecto originario de Java, el cual ha sido traducido a .Net y actualmente ya se dispone de la versión 2.1.

CASOS DE ÉXITO:
Wikipedia.com
Monster.com
search.wikia.com
technorati.com
Fotocasa.com
Infojobs.com.br
Laboris.net

MÁS INFORMACIÓN:
Sitio oficial: http://incubator.apache.org/lucene.net/
Descargas: http://incubator.apache.org/lucene.net/download/
Documentación: http://incubator.apache.org/lucene.net/docs/

lunes, febrero 11, 2008

Order by sql dinámico

Este tipo de instrucción, válida para SQL Server tiene una restricción, que es que solo se puede ordenar por 1 única columna. Esta restricción, la podríamos solventar teniendo una columna de ordenación con las diferentes concatenaciones si fuera necesario.

CÓDIGO:

ORDER BY
CASE WHEN @Orden = 2 THEN i.FK_IdCategoria
ELSE i.Orden
END


Otra solución a este tema, sería utilizar sql dinámico tal y como se ve a continuación:

CÓDIGO 1:
declare @sql as varchar(1000)
declare @id as varchar(10)

set @id='10'

set @sql ='select * from tabla where id=' + @id
EXEC(@sql)

CÓDIGO 2:
declare @sql as varchar(1000)
declare @id as varchar(10)

set @sql ='select * from tabla where id=@id'

sp_executesql @SQL, N'
@id nVarChar(10)', @id= 'cliente1'

martes, febrero 05, 2008

DateFormatString en GridView

Esta es una opción muy típica de uso con gridviews y datagrids. Para aquellos que heredamos nuestros conocimientos de Asp.Net 1.0 es importante saber este detalle para no volvernos locos. Cuando utilicemos columnas con fechas, y queramos solo mostrar el día debemos utilizar el parámetros HTMLEncode=false.

Código:
<asp:boundfield headertext="Naixement" datafield="FechaNacimiento" htmlencode="false" dataformatstring="{0:dd/MM/yyyy}">