Función Row_number con un valor de inicio

En SQL Server existe una función denominada ROW_NUMBER() que es muy sencilla de utilizar y nos devuelve de manera secuencial el número de la fila que toda la Query, comenzando por 1.

El ejemplo mas sencillo es (yo siempre utilizo mis tablas con la columna ID):

SELECT	 ROW_NUMBER() OVER(ORDER BY ID DESC) ID
from [TU_TABLA]

Acá podemos ver el resultado que nos devolvería esta queryimg1

Entonces si queremos hacer una secuencialidad de registros entre 2 queries, solamente tenemos que hacer lo siguiente:

declare @val int

select @val=MAX(t.id) 
from ( 
SELECT ROW_NUMBER() OVER(ORDER BY ID DESC) ID 
 from [TU_TABLA_1]) t

select @val+ROW_NUMBER() OVER(ORDER BY ID DESC) ID2 
from [TU_TABLA_2]

La segunda query comienza a contar sumando la variable que le ingreso. Muy simple y rápido.
Saludos.

Comentarios desactivados | Category: Sin categoría

Año nuevo, Jquery Nueva (?)

Las grandes cosas están construidas por pequeños elementos que hacen nuestra vida feliz y placentera. En este pequeño post voy a ir enumerando pequeños detalles de JQUERY que nos van a permitir solucionar problemas en nuestra interface ASP.NET con transparencia y sencillez.

Ejemplo 1: Cambio de valores de un input/textbox/label

En la cabecera tomamos siempre el archivo JS del site de JQUERY y lo insertamos en el <head>

&lt;head runat=&quot;server&quot;&gt;
&lt;script&gt; src=&quot;http://code.jquery.com/jquery-latest.js&quot;&gt;&lt;/script&gt;
&lt;/head&gt;

Read the rest of this entry »

Comentarios desactivados | Category: Javascript, Jquery

Hace un tiempo, con un desarrollo ya avanzado, me tuve que enfrentar a una disyuntiva. Generada todas mis clases de negocios con sus correspondientes propiedades necesitaba realizar un algoritmo que me permita encriptar determinados valores de esas propiedades al momento de persistirlas en la base y desencriptarlas al momento de ser consultadas.

Buscando una solución llegue a la clase System.Attribute que me ofrecía .NET, que me permitía agregarle un poco de información a las clases sin tener que rescribirlas todas soportando la nueva funcionalidad. De esta manera, y con la ayuda del TodoPoderoso Señor Reflection, obtuve una manera rápida, y que no me generó una baja en la performance de mi sistema, para poder recorrer las clases y saber cual atributo debía encriptar/desencriptar.

Vamos al ejemplo para explicar un poco como funciona:

1- Paso, crear nuestro Atributo personalizado:

&lt;AttributeUsage(AttributeTargets.Property)&gt; _
Public Class AtributoEspecial
Inherits System.Attribute
End Class

Se puede notar que que el tag AttributeUsage me permite usar mi atributo solamente sobre lo que yo deseo, en mi caso propiedades pero pueden ser lo que uno quiera: delegados, enum`s, eventos, interfaces, etc

image

2-Tagear a las propiedades de las clases que queremos a attributear (?) de esta manera: _

Public Class ClaseConcretaConAtributos
Inherits ClaseBase

Private _cuit As String

&lt;Librerias.AtributoEspecial()&gt; _
Public Property cuit() As String
Get
Return _cuit
End Get
Set(ByVal value As String)
_cuit = value
End Set
End Property

End Class

y ahora resta recorrer la clase con Reflection de esta manera:

For Each propiedad As Reflection.PropertyInfo In Me.GetType.GetProperties
For Each objAtributos As Object In propiedad.GetCustomAttributes(True)
Dim typeAtributo As Librerias.AtributoEspecial = TryCast(objAtributos, Librerias.AtributoEspecial)
If typeAtributo IsNot Nothing Then
&#039;REALIZO EL CODIGO QUE NECESITO PARA LAS PROPIEDAS QUE TIENEN ESE ATRIBUTO
end If
Next
Next

Ahi es donde está la punta del iceberg de Reflection. No vamos en ese post a adentrarnos sobre este tema.

Espero que les sirva, saludos.

-código fuente en SkyDrive:

Comentarios desactivados | Category: .NET, C#, General, VB.NET

Tips: Manejo de Div desde el servidor y del HTML

Existen varias formas de ocultar y mostrar etiquetas <div> en nuestra Web, en general son maneras para mostrar información útil al usuario en el momento en que él la necesita y ocultarla cuando no la necesite. De esta manera le damos el control al usuario de que vea lo que él desee, en el momento en que lo deseé.

Ya anteriormente comente un pequeño tips para manejar los TRs

La primera manera es la mas simple y permite hacerlo desde el servidor, en un postback:

&lt;div id=&quot;myDIV&quot; runat=&quot;server&quot;&gt;
&lt;asp:Label ID=&quot;lbl1&quot; runat=&quot;server&quot; Text=&quot;No hay datos.&quot; visible=&quot;true&quot;&gt;&lt;/asp:Label&gt;
&lt;/div&gt;

Lo importante en este caso es el runat= server que insertamos en el DIV, de esta manera lo tendremos como un objeto en el servidor.
Simplemente manejamos el estado visible true/false del div como un objeto mas.

Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click &#039;si esta invisible (visible=true, lo oculta. Sino lo muestra
 If myDIV.visible Then
   myDIV.visible = False
 Else
   myDIV.visible = True
 End If
End Sub

Saludos.

Comentarios desactivados | Category: HTML

Buscando la manera de encontrar una serie de Gridview en una página es que llegué a crear esta función. Que es básicamente recorrer los controles de manera recursiva porque un control puede contener a otros controles en su interior. En mi caso era solamente ocultar el FooterRow de las Grillas (Gridview) y tengo en cuenta que cuando la grilla no tiene rows la oculto directamente.

El código en VB:

        For Each ctrl As Control In Page.Controls
          Dim gv As GridView = TryCast(ctrl, GridView)
          If gv Is Nothing Then
               RecorrerColeccion(ctrl)
          Else
              If gv.Rows.Count &gt; 0 Then
                 gv.FooterRow.Visible = False
               Else
                 gv.Visible = False
              End If
          End If
       Next

Acá esta la función recursiva RecorrerColeccion:

 Sub RecorrerColeccion(ByVal parentCtrl As Control)
          For Each pctrl As Control In parentCtrl.Controls
              Dim gv As GridView = TryCast(pctrl, GridView)
              If gv Is Nothing Then
                  RecorrerColeccion(pctrl)
              Else
                  If gv.Rows.Count &gt; 0 Then
                      gv.FooterRow.Visible = False
                  Else
                      gv.Visible = False
                  End If
              End If
          Next
      End Sub

Y acá esta el mismo ejemplo en C#:

 foreach (Control ctrl in Page.Controls) {
      GridView gv = ctrl as GridView;
      if (gv == null) {
          RecorrerColeccion(ctrl);
      } else {
          if (gv.Rows.Count &gt; 0) {
              gv.FooterRow.Visible = false;
         } else {
              gv.Visible = false;
          }
      }
  }
   
  public void RecorrerColeccion(Control parentCtrl)
  {
      foreach (Control pctrl in parentCtrl.Controls) {
          GridView gv = pctrl as GridView;
          if (gv == null) {
              RecorrerColeccion(pctrl);
          } else {
              if (gv.Rows.Count &gt; 0) {
                  gv.FooterRow.Visible = false;
              } else {
                  gv.Visible = false;
              }
          }
      }
  }

Espero que les resuelva el problema como a mi.

Saludos.

1 Comment | Category: asp.net, GridView

Deshabilitar el botón de Login en el postback

Voy a mostrar un ejemplo muy sencillo y practico de como deshabilitar el botón de login cuando el usuario le da click para evitar el doble post-back.

El ejemplo esta testeado en IE 7, Firefox 3.0.11 y Chrone 2.0

Voy a mostrar todo el HTML de la pagina de una pagina de login y luego voy a explicar los 2 puntos que hacen que funcione.

El HTML es este:

<span style="color:#0000ff;">&lt;</span><span style="color:#800000;">html</span> <span style="color:#ff0000;">xmlns</span><span style="color:#0000ff;">="http://www.w3.org/1999/xhtml"</span> <span style="color:#0000ff;">&gt;</span>

<span style="color:#0000ff;">&lt;</span><span style="color:#800000;">head</span> <span style="color:#ff0000;">runat</span><span style="color:#0000ff;">="server"</span><span style="color:#0000ff;">&gt;</span>

    <span style="color:#0000ff;">&lt;</span><span style="color:#800000;">title</span><span style="color:#0000ff;">&gt;</span>Mi pagina de Login<span style="color:#0000ff;">&lt;/</span><span style="color:#800000;">title</span><span style="color:#0000ff;">&gt;</span>

<span style="color:#0000ff;">&lt;/</span><span style="color:#800000;">head</span><span style="color:#0000ff;">&gt;</span>

<span style="color:#0000ff;">&lt;</span><span style="color:#800000;">body</span><span style="color:#0000ff;">&gt;</span>

    <span style="color:#0000ff;">&lt;</span><span style="color:#800000;">form</span> <span style="color:#ff0000;">id</span><span style="color:#0000ff;">="form1"</span> <span style="color:#ff0000;">runat</span><span style="color:#0000ff;">="server"</span> <span style="color:#ff0000;">submitdisabledcontrols</span> =<span style="color:#ff0000;">true</span> <span style="color:#0000ff;">&gt;</span>

    <span style="color:#0000ff;">&lt;</span><span style="color:#800000;">div</span><span style="color:#0000ff;">&gt;</span>

        <span style="color:#0000ff;">&lt;</span><span style="color:#800000;">table</span><span style="color:#0000ff;">&gt;</span>

            <span style="color:#0000ff;">&lt;</span><span style="color:#800000;">tr</span><span style="color:#0000ff;">&gt;</span>

                <span style="color:#0000ff;">&lt;</span><span style="color:#800000;">td</span> <span style="color:#ff0000;">style</span><span style="color:#0000ff;">="width: 100px"</span><span style="color:#0000ff;">&gt;</span>

                    <span style="color:#0000ff;">&lt;</span><span style="color:#800000;">asp:Label</span> <span style="color:#ff0000;">ID</span><span style="color:#0000ff;">="Label1"</span> <span style="color:#ff0000;">runat</span><span style="color:#0000ff;">="server"</span> <span style="color:#ff0000;">Text</span><span style="color:#0000ff;">="Password"</span><span style="color:#0000ff;">&gt;&lt;/</span><span style="color:#800000;">asp:Label</span><span style="color:#0000ff;">&gt;&lt;/</span><span style="color:#800000;">td</span><span style="color:#0000ff;">&gt;</span>

                <span style="color:#0000ff;">&lt;</span><span style="color:#800000;">td</span> <span style="color:#ff0000;">style</span><span style="color:#0000ff;">="width: 100px"</span><span style="color:#0000ff;">&gt;</span>

                    <span style="color:#0000ff;">&lt;</span><span style="color:#800000;">asp:TextBox</span> <span style="color:#ff0000;">ID</span><span style="color:#0000ff;">="TextBox1"</span> <span style="color:#ff0000;">runat</span><span style="color:#0000ff;">="server"</span><span style="color:#0000ff;">&gt;&lt;/</span><span style="color:#800000;">asp:TextBox</span><span style="color:#0000ff;">&gt;&lt;/</span><span style="color:#800000;">td</span><span style="color:#0000ff;">&gt;</span>

                <span style="color:#0000ff;">&lt;</span><span style="color:#800000;">td</span> <span style="color:#ff0000;">style</span><span style="color:#0000ff;">="width: 100px"</span><span style="color:#0000ff;">&gt;</span>

                <span style="color:#0000ff;">&lt;/</span><span style="color:#800000;">td</span><span style="color:#0000ff;">&gt;</span>

            <span style="color:#0000ff;">&lt;/</span><span style="color:#800000;">tr</span><span style="color:#0000ff;">&gt;</span>

            <span style="color:#0000ff;">&lt;</span><span style="color:#800000;">tr</span><span style="color:#0000ff;">&gt;</span>

                <span style="color:#0000ff;">&lt;</span><span style="color:#800000;">td</span> <span style="color:#ff0000;">style</span><span style="color:#0000ff;">="width: 100px; height: 21px"</span><span style="color:#0000ff;">&gt;</span>

                    <span style="color:#0000ff;">&lt;</span><span style="color:#800000;">asp:Label</span> <span style="color:#ff0000;">ID</span><span style="color:#0000ff;">="Label2"</span> <span style="color:#ff0000;">runat</span><span style="color:#0000ff;">="server"</span> <span style="color:#ff0000;">Text</span><span style="color:#0000ff;">="Label"</span><span style="color:#0000ff;">&gt;&lt;/</span><span style="color:#800000;">asp:Label</span><span style="color:#0000ff;">&gt;&lt;/</span><span style="color:#800000;">td</span><span style="color:#0000ff;">&gt;</span>

                <span style="color:#0000ff;">&lt;</span><span style="color:#800000;">td</span> <span style="color:#ff0000;">style</span><span style="color:#0000ff;">="width: 100px; height: 21px"</span><span style="color:#0000ff;">&gt;</span>

                    <span style="color:#0000ff;">&lt;</span><span style="color:#800000;">asp:TextBox</span> <span style="color:#ff0000;">ID</span><span style="color:#0000ff;">="TextBox2"</span> <span style="color:#ff0000;">runat</span><span style="color:#0000ff;">="server"</span> <span style="color:#ff0000;">TextMode</span><span style="color:#0000ff;">="Password"</span> <span style="color:#ff0000;">Width</span><span style="color:#0000ff;">="149px"</span><span style="color:#0000ff;">&gt;&lt;/</span><span style="color:#800000;">asp:TextBox</span><span style="color:#0000ff;">&gt;&lt;/</span><span style="color:#800000;">td</span><span style="color:#0000ff;">&gt;</span>

                <span style="color:#0000ff;">&lt;</span><span style="color:#800000;">td</span> <span style="color:#ff0000;">style</span><span style="color:#0000ff;">="width: 100px; height: 21px"</span><span style="color:#0000ff;">&gt;</span>

                <span style="color:#0000ff;">&lt;/</span><span style="color:#800000;">td</span><span style="color:#0000ff;">&gt;</span>

            <span style="color:#0000ff;">&lt;/</span><span style="color:#800000;">tr</span><span style="color:#0000ff;">&gt;</span>

            <span style="color:#0000ff;">&lt;</span><span style="color:#800000;">tr</span><span style="color:#0000ff;">&gt;</span>

                <span style="color:#0000ff;">&lt;</span><span style="color:#800000;">td</span> <span style="color:#ff0000;">style</span><span style="color:#0000ff;">="width: 100px"</span><span style="color:#0000ff;">&gt;</span>

                <span style="color:#0000ff;">&lt;/</span><span style="color:#800000;">td</span><span style="color:#0000ff;">&gt;</span>

                <span style="color:#0000ff;">&lt;</span><span style="color:#800000;">td</span> <span style="color:#ff0000;">style</span><span style="color:#0000ff;">="width: 100px; text-align: center"</span><span style="color:#0000ff;">&gt;</span>

                    <span style="color:#0000ff;">&lt;</span><span style="color:#800000;">asp:Button</span> <span style="color:#ff0000;">ID</span><span style="color:#0000ff;">="Button1"</span> <span style="color:#ff0000;">runat</span><span style="color:#0000ff;">="server"</span> <span style="color:#ff0000;">Text</span><span style="color:#0000ff;">="Ingresar"</span>  <span style="color:#ff0000;">OnClientClick</span> <span style="color:#0000ff;">="this.value='Validando...'; this.disabled=true; __doPostBack('Button1','')"</span> <span style="color:#ff0000;">OnClick</span><span style="color:#0000ff;">="Button1_Click"</span> <span style="color:#0000ff;">/&gt;&lt;/</span><span style="color:#800000;">td</span><span style="color:#0000ff;">&gt;</span>

                <span style="color:#0000ff;">&lt;</span><span style="color:#800000;">td</span> <span style="color:#ff0000;">style</span><span style="color:#0000ff;">="width: 100px"</span><span style="color:#0000ff;">&gt;</span>

                <span style="color:#0000ff;">&lt;/</span><span style="color:#800000;">td</span><span style="color:#0000ff;">&gt;</span>

            <span style="color:#0000ff;">&lt;/</span><span style="color:#800000;">tr</span><span style="color:#0000ff;">&gt;</span>

        <span style="color:#0000ff;">&lt;/</span><span style="color:#800000;">table</span><span style="color:#0000ff;">&gt;</span>

    <span style="color:#0000ff;">&lt;/</span><span style="color:#800000;">div</span><span style="color:#0000ff;">&gt;</span>

    <span style="color:#0000ff;">&lt;/</span><span style="color:#800000;">form</span><span style="color:#0000ff;">&gt;</span>

<span style="color:#0000ff;">&lt;/</span><span style="color:#800000;">body</span><span style="color:#0000ff;">&gt;</span>

<span style="color:#0000ff;">&lt;/</span><span style="color:#800000;">html</span><span style="color:#0000ff;">&gt;</span>

Del HTML observamos 2 puntos importantes el primero es la propiedad submitdisabledcontrols en true. Gracias a este propiedad podemos forzar el postback del botón cuando éste está bloqueado.

<span style="color:#606060;">   1:</span> <span style="color:#0000ff;">&lt;</span><span style="color:#800000;">form</span> <span style="color:#ff0000;">id</span><span style="color:#0000ff;">="form1"</span> <span style="color:#ff0000;">runat</span><span style="color:#0000ff;">="server"</span> <span style="color:#ff0000;">submitdisabledcontrols</span> =<span style="color:#ff0000;">true</span> <span style="color:#0000ff;">&gt;</span>

Y el 2do punto es el código javascript del botón de login:

<span style="color:#606060;">   1:</span> <span style="color:#0000ff;">&lt;</span><span style="color:#800000;">asp:Button</span> <span style="color:#ff0000;">ID</span><span style="color:#0000ff;">="Button1"</span> <span style="color:#ff0000;">runat</span><span style="color:#0000ff;">="server"</span> <span style="color:#ff0000;">Text</span><span style="color:#0000ff;">="Ingresar"</span> <span style="color:#ff0000;">OnClientClick</span> <span style="color:#0000ff;">="this.value='Validando...'; this.disabled=true; __doPostBack('Button1','')"</span> <span style="color:#ff0000;">OnClick</span><span style="color:#0000ff;">="Button1_Click"</span> <span style="color:#0000ff;">/&gt;</span>

Aquí, en la propiedad OnClientClick, es donde ingresamos todo el código javascript, que consta del cambio del Label, el bloqueo del botón y el postback de la pagina. Cabe destacar que el __doPostback tiene que ir ultimo para que realice el postback después de hacer los cambios visibles en el cliente.

Bueno realmente es muy sencillo, es simple y es claro (kuak)

Saludos.

Comentarios desactivados | Category: Javascript

Suele pasar que tengamos mas de una grilla (gridView en .NET 2.0) en una misma pagina Web y es incomodo, cuando se necesita que cada fila tenga un comportamiento, copiar y pegar código para cada grilla en el evento RowDataBound. Por ejemplo, si quiero a cada fila agregarle algo de Javascript para su validación o simplemente cambiar de color esa fila.

Este ejemplo muetra como enlazar un solo evento RowDataBound para las grillas que sean necesarias en un misma pagina. Esta hecho en  ASP.NET (VB.NET) 2.0

Una vez creado el proyecto y agregada las 2 GridView, simplemente en el Code Behind y nos paramos sobre una GridView.

foto0

Y luego en sus eventos vamos al RowDataBound:

foto01

Una vez que nos genero el código simplemente vamos hacia el handles (que esta al final) con comas vamos agregando todos los objetos que queremos que ese evento maneje:

foto1

Ahora bien, la pregunta es simple: ¿Como distingo una Grilla de Otra?, simple:

<div>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;background-color:#f4f4f4;border-style:none;margin:0;padding:0;"><span style="color:#0000ff;">Protected</span> <span style="color:#0000ff;">Sub</span> GridView1_RowDataBound(<span style="color:#0000ff;">ByVal</span> sender <span style="color:#0000ff;">As</span> <span style="color:#0000ff;">Object</span>, <span style="color:#0000ff;">ByVal</span> e <span style="color:#0000ff;">As</span> System.Web.UI.WebControls.GridViewRowEventArgs) _
                   <span style="color:#0000ff;">Handles</span> GridView1.RowDataBound, GridView2.RowDataBound

       <span style="color:#0000ff;">If</span> e.Row.RowType = DataControlRowType.DataRow <span style="color:#0000ff;">Then</span> <span style="color:#008000;">'DataRow Vale las row que tienen datos, de esta manera se saltea el header,el footer y el pager</span>
           <span style="color:#0000ff;">Dim</span> idCelda <span style="color:#0000ff;">As</span> <span style="color:#0000ff;">Integer</span>
           <span style="color:#0000ff;">Dim</span> gvrow <span style="color:#0000ff;">As</span> GridViewRow = <span style="color:#0000ff;">CType</span>(e.Row.Cells(idCelda).NamingContainer, GridViewRow)
           <span style="color:#0000ff;">Select</span> <span style="color:#0000ff;">Case</span> <span style="color:#0000ff;">CType</span>(sender, GridView).ID
               <span style="color:#0000ff;">Case</span> GridView1.ID
                   gvrow.BackColor = Drawing.Color.Red
               <span style="color:#0000ff;">Case</span> GridView2.ID
                   gvrow.BackColor = Drawing.Color.LightGoldenrodYellow
           <span style="color:#0000ff;">End</span> <span style="color:#0000ff;">Select</span>
       <span style="color:#0000ff;">End</span> <span style="color:#0000ff;">If</span>

   <span style="color:#0000ff;">End</span> Sub

Bastante sencillo. Y así es como nos queda:

fotofinal

Adjunto el proyecto aqui

Saludos.

1 Comment | Category: GridView