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

Muchas veces porque queda muy agradable a la vista, es conveniente abrir una ventana (popup) con información adicional sobre un ítem deseado. Otro caso (particularmente el que me tocó desarrollar) puede ser hacer una especie de Wizard donde las ventanas cumplan una suerte de varios pasos donde se pueda ir para atrás,adelante y/o finalizar, al mejor estilo instalación de cualquier soft (siguiente,siguiente,siguiente,instalar…finalizar).

Lo que voy a mostrar parte de una pagina Principal (Pagina Madre) que es la que va a abrir el popup y acá se pueden usar 2 maneras, una ventana modal o una ventana modeless.

ventana modal: Este tipo de ventanas no permite la interacción con la ventana anterior mientras este abierta, de hecho interrumpe cualquier ejecución que se este haciendo por atrás. Por ejemplo si nosotros hacemos un postback y en el servidor abrimos una ventana con el método de JS window.showModalDialog puede ocurrir que la pagina madre quede en blanco o a medio cargar.

ventana modeless: Estas ventanas si permiten la interacción con su ventana madre, de hecho es posible hacer click en la ventana de atrás y lo va a permitir. Por lo comentado arriba este tipo modal puede ser útil. Pero si por ejemplo vamos a abrir una modal de una fila en un gridview que tiene un enlace a eliminarlo, si lo hace mientras esta la modeles abierta se lo va a permitir.

Este ejemplo esta diseñado para IE 6.0 en adelante y voy a usar VS2005. Básicamente voy a hacer esto:

Voy a usar una sola pagina como Wizard pero pueden ser las que se necesiten, al fin y al cabo todas terminan en un pagina de Fin.

La pagina principal va a contar con script porque va a mantener una variable para poder tomarla al final:

&lt;script&gt;
<span style="color:#0000ff;">var</span> Guardar;
<span style="color:#0000ff;">function</span> DeseaGuardar()
{
window.document.Form1.txtOculto.value=Guardar;
__doPostBack(<span style="color:#006080;">'lnkGuardar'</span>,<span style="color:#006080;">''</span>);
}
<span style="color:#0000ff;">function</span> Ejecutar()
{
<span style="color:#008000;">//Agregamos el JS para pasar el parametro</span>
<span style="color:#0000ff;">var</span> param=<span style="color:#006080;">''</span>;
param=<span style="color:#006080;">'valor='</span> + window.document.Form1.TextBox1.value;
WizardGeneral(200,550,<span style="color:#006080;">'Default2.aspx'</span>,param);
}
&lt;/script&gt;

La función WizardGeneral esta en un JS que adjunto con todo el proyecto al final y es la que arma la URL para abrir el Wizard de una manera u otra (Modal/Modeless) . Yo lo hago con una función en el evento onclick llamando a Ejecutar pero por ejemplo si queremos hacer popups de una grilla agregándole a todas las rows solo vamos a necesitar el ID de cada row para levantar los datos en el popup con lo cual se puede hacer todo en la 1era carga de la pagina agregando el id en el evento RowDatabound. Yo a modo de ejemplo solo modifico un textbox.

El HTML de la pagina sería algo así:

<span style="color:#0000ff;">&lt;</span><span style="color:#800000;">HTML</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;">title</span><span style="color:#0000ff;">&gt;</span>Prueba<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;">meta</span> <span style="color:#ff0000;">content</span><span style="color:#0000ff;">="Microsoft Visual Studio .NET 7.1"</span> <span style="color:#ff0000;">name</span><span style="color:#0000ff;">="GENERATOR"</span><span style="color:#0000ff;">&gt;</span>
<span style="color:#0000ff;">&lt;</span><span style="color:#800000;">meta</span> <span style="color:#ff0000;">content</span><span style="color:#0000ff;">="Visual Basic .NET 7.1"</span> <span style="color:#ff0000;">name</span><span style="color:#0000ff;">="CODE_LANGUAGE"</span><span style="color:#0000ff;">&gt;</span>
<span style="color:#0000ff;">&lt;</span><span style="color:#800000;">meta</span> <span style="color:#ff0000;">content</span><span style="color:#0000ff;">="JavaScript"</span> <span style="color:#ff0000;">name</span><span style="color:#0000ff;">="vs_defaultClientScript"</span><span style="color:#0000ff;">&gt;</span>
<span style="color:#0000ff;">&lt;</span><span style="color:#800000;">script</span> <span style="color:#ff0000;">language</span><span style="color:#0000ff;">="javascript"</span> <span style="color:#ff0000;">src</span><span style="color:#0000ff;">="JS/ScriptJS.js"</span><span style="color:#0000ff;">&gt;&lt;/</span><span style="color:#800000;">script</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:#ff0000;">style</span><span style="color:#0000ff;">="text-align: left"</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;">method</span><span style="color:#0000ff;">="post"</span> <span style="color:#ff0000;">runat</span><span style="color:#0000ff;">="server"</span><span style="color:#0000ff;">&gt;</span>
<span style="color:#ff0000;">&amp;nbsp;</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;">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;">br</span> <span style="color:#0000ff;">/&gt;</span>
<span style="color:#0000ff;">&lt;</span><span style="color:#800000;">table</span> <span style="color:#ff0000;">width</span><span style="color:#0000ff;">="100%"</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;">="text-align: center;"</span> <span style="color:#ff0000;">colspan</span><span style="color:#0000ff;">="3"</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;">="lblerror"</span> <span style="color:#ff0000;">runat</span><span style="color:#0000ff;">="server"</span> <span style="color:#ff0000;">Width</span><span style="color:#0000ff;">="100%"</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;">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: 24px"</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;">="Valor"</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: 60px"</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:#ff0000;">Width</span><span style="color:#0000ff;">="279px"</span><span style="color:#0000ff;">&gt;&lt;/</span><span style="color:#800000;">asp:TextBox</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"</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: 24px"</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: 60px; text-align: center;"</span><span style="color:#0000ff;">&gt;</span>
<span style="color:#0000ff;">&lt;</span><span style="color:#800000;">input</span> <span style="color:#ff0000;">id</span><span style="color:#0000ff;">="btnBoton"</span> <span style="color:#ff0000;">type</span><span style="color:#0000ff;">="button"</span> <span style="color:#ff0000;">value</span><span style="color:#0000ff;">="Popup"</span> <span style="color:#ff0000;">runat</span> =<span style="color:#ff0000;">server</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;">br</span> <span style="color:#0000ff;">/&gt;</span>
<span style="color:#0000ff;">&lt;</span><span style="color:#800000;">asp:LinkButton</span> <span style="color:#ff0000;">ID</span><span style="color:#0000ff;">="lnkGuardar"</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:LinkButton</span><span style="color:#0000ff;">&gt;</span><span style="color:#ff0000;">&amp;nbsp;</span>
<span style="color:#0000ff;">&lt;</span><span style="color:#800000;">input</span> <span style="color:#ff0000;">id</span><span style="color:#0000ff;">="txtOculto"</span> <span style="color:#ff0000;">style</span><span style="color:#0000ff;">="width: 54px"</span> <span style="color:#ff0000;">runat</span> =<span style="color:#ff0000;">server</span>  <span style="color:#ff0000;">type</span><span style="color:#0000ff;">="hidden"</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>

Al final de la pagina hay 2 elementos importantes un Link, que es el que va a causar el postback de la pagina madre cuando termine el wizard y un hidden que es el que va a tener el valor de retorno del wizard.

El código de servidor es mas o menos este:

<span style="color:#0000ff;">Private</span> <span style="color:#0000ff;">Sub</span> Page_Load(<span style="color:#0000ff;">ByVal</span> sender <span style="color:#0000ff;">As</span> System.<span style="color:#0000ff;">Object</span>, <span style="color:#0000ff;">ByVal</span> e <span style="color:#0000ff;">As</span> System.EventArgs) <span style="color:#0000ff;">Handles</span> <span style="color:#0000ff;">MyBase</span>.Load
<span style="color:#008000;">'Introducir aquí el código de usuario para inicializar la página</span>
<span style="color:#0000ff;">If</span> <span style="color:#0000ff;">Not</span> Page.IsPostBack <span style="color:#0000ff;">Then</span>
<span style="color:#0000ff;">Try</span>
txtOculto.Value = <span style="color:#006080;">""</span>
btnBoton.Attributes.Add(<span style="color:#006080;">"onclick"</span>, <span style="color:#006080;">"javascript:Ejecutar()"</span>)
<span style="color:#0000ff;">Catch</span> ex <span style="color:#0000ff;">As</span> Exception
lblerror.Text = ex.Message
<span style="color:#0000ff;">End</span> <span style="color:#0000ff;">Try</span>
<span style="color:#0000ff;">End</span> <span style="color:#0000ff;">If</span>
<span style="color:#0000ff;">End</span> <span style="color:#0000ff;">Sub</span>

<span style="color:#0000ff;">Protected</span> <span style="color:#0000ff;">Sub</span> lnkGuardar_Click(<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.EventArgs) <span style="color:#0000ff;">Handles</span> lnkGuardar.Click
<span style="color:#008000;">'txtOculto tiene el valor modificado que me devuelve el Wizard</span>
<span style="color:#0000ff;">If</span> <span style="color:#0000ff;">Not</span> <span style="color:#0000ff;">String</span>.IsNullOrEmpty(txtOculto.Value) <span style="color:#0000ff;">Then</span> TextBox1.Text = txtOculto.Value
<span style="color:#0000ff;">End</span> Sub

Cuando la pagina de fin se cierre “cargar” de nuevo esta pagina ósea va a pasar por el page_load por eso hay que manejar bien el page.ispostback para no pisar valores y luego va a entrar por el click del Link que nosotros le formamos a hacer con la instrucción de Javascript __doPostBack.

La Pagina del Wizard tiene este HTML:

<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>Pagina del Wizard<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;">base</span> <span style="color:#ff0000;">target</span><span style="color:#0000ff;">="_self"</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;">script</span> <span style="color:#ff0000;">language</span><span style="color:#0000ff;">="javascript"</span><span style="color:#0000ff;">&gt;</span>
<span style="color:#606060;"> 1:</span>
<span style="color:#606060;"> 2:</span>         <span style="color:#0000ff;">var</span> sData = dialogArguments;
<span style="color:#606060;"> 3:</span>         sData.Guardar= <span style="color:#006080;">''</span>;
<span style="color:#606060;"> 4:</span>         sData.DeseaGuardar();
<span style="color:#606060;"> 5:</span>         <span style="color:#008000;">/*function cargarVentana ()</span>
<span style="color:#606060;"> 6:</span> <span style="color:#008000;"> {</span>
<span style="color:#606060;"> 7:</span> <span style="color:#008000;"> document.form1.TextBox1.value=window.dialogArguments;</span>
<span style="color:#606060;"> 8:</span> <span style="color:#008000;"> }*/</span>
<span style="color:#606060;"> 9:</span>
<span style="color:#606060;"> 10:</span>       <span style="color:#0000ff;">function</span> sourceCode()  <span style="color:#008000;">//Para ver el codigo fuente</span>
<span style="color:#606060;"> 11:</span>         {
<span style="color:#606060;"> 12:</span>          d=window.open();
<span style="color:#606060;"> 13:</span>          d.document.open(<span style="color:#006080;">'text/plain'</span>).write(document.documentElement.outerHTML);
<span style="color:#606060;"> 14:</span>          }

</script>
<form id=”form1″ runat=”server” method=”post”>
<table>
<tr>
<td style=”width: 100px”>
<asp:Label ID=”Label1″ runat=”server” Text=”Valor del Wizard” Width=”118px”></asp:Label></td>
<td style=”width: 100px”>
<asp:TextBox ID=”TextBox1″ runat=”server”></asp:TextBox></td>
</tr>
<tr>
<td style=”width: 100px”>
</td>
<td style=”width: 100px”>
<asp:Button ID=”Button1″ runat=”server” Text=”Ejecutar” /></td>
</tr>
<tr>
<td colspan=”2″>
<asp:Label ID=”Label2″ runat=”server” ForeColor=”#0000C0″ Text=”Al cambiar esta valor se modifica el textbox de la pagina principal”></asp:Label></td>
</tr>
</table>
</form>
</body>
</html>

Tiene algunas particularidades la primera es que tiene le atributo target= self esto es para cuando hacemos el response.redirect a la pagina de fin no nos abra una pagina sino que siga en la misma. Después la función Javascript toma el dialogArguments que son las variables o funciones de la pagina madre. Y por ultimo algo que nos puede ser muy útil para depurar es una función para ver el HTML de la pagina cuando se esta ejecutando, porque las modales no dejan hacer click derecho para ver el código. Simplemente se agrega el nombre (sourceCode) en el evento onload del Form y listo apenas carga la pagina tenemos una nueva ventanita con el HTML :D.

Este es el código de servidor:

<span style="color:#0000ff;">Protected</span> <span style="color:#0000ff;">Sub</span> Page_Load(<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.EventArgs) <span style="color:#0000ff;">Handles</span> <span style="color:#0000ff;">Me</span>.Load
<span style="color:#0000ff;">Try</span>
<span style="color:#0000ff;">If</span> <span style="color:#0000ff;">Not</span> Page.IsPostBack <span style="color:#0000ff;">Then</span>
TextBox1.Text = Request.Params(<span style="color:#006080;">"valor"</span>)
<span style="color:#0000ff;">Else</span>
<span style="color:#0000ff;">Dim</span> strpage <span style="color:#0000ff;">As</span> <span style="color:#0000ff;">String</span> = <span style="color:#006080;">"General_Fin_W.aspx"</span>
<span style="color:#0000ff;">Dim</span> paramFinal <span style="color:#0000ff;">As</span> <span style="color:#0000ff;">String</span> = <span style="color:#006080;">"modo=modificacion&amp;datos="</span>.ToString + TextBox1.Text
strpage += <span style="color:#006080;">"?"</span>.ToString + paramFinal.ToString <span style="color:#008000;">'General_Fin_W.aspx?modo=modificacion&amp;datos=</span>
Response.Redirect(strpage)
<span style="color:#0000ff;">End</span> <span style="color:#0000ff;">If</span>
<span style="color:#0000ff;">Catch</span> ex <span style="color:#0000ff;">As</span> Exception
Response.Write(ex.Message)
<span style="color:#0000ff;">End</span> <span style="color:#0000ff;">Try</span>
<span style="color:#0000ff;">End</span> Sub

y por ultimo la pagina de Fin HTML y código de Servidor:

<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;">id</span><span style="color:#0000ff;">="Head1"</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;&lt;/</span><span style="color:#800000;">title</span><span style="color:#0000ff;">&gt;</span>
<span style="color:#0000ff;">&lt;</span><span style="color:#800000;">script</span> <span style="color:#ff0000;">language</span><span style="color:#0000ff;">="JavaScript"</span> <span style="color:#ff0000;">type</span><span style="color:#0000ff;">="text/javascript"</span><span style="color:#0000ff;">&gt;</span>
<span style="color:#606060;"> 1:</span>
<span style="color:#606060;"> 2:</span>      <span style="color:#0000ff;">function</span> CerrarWizard()
<span style="color:#606060;"> 3:</span>      {
<span style="color:#606060;"> 4:</span>       <span style="color:#0000ff;">var</span> sData = dialogArguments;
<span style="color:#606060;"> 5:</span>
<span style="color:#606060;"> 6:</span>         <span style="color:#008000;">//var datos= document.Form1.HiddenField1.value; // Esto vale lo que </span>
<span style="color:#606060;"> 7:</span>         <span style="color:#008000;">//termina concatenando en el wizard</span>
<span style="color:#606060;"> 8:</span>         <span style="color:#0000ff;">var</span> datos= document.Form1.HiddenField1.value;
<span style="color:#606060;"> 9:</span>         sData.Guardar=datos;
<span style="color:#606060;"> 10:</span>         sData.DeseaGuardar();
<span style="color:#606060;"> 11:</span>         window.close();
<span style="color:#606060;"> 12:</span>         }
<span style="color:#606060;"> 13:</span>
<span style="color:#606060;"> 14:</span>        <span style="color:#0000ff;">function</span> sourceCode()  <span style="color:#008000;">//Para ver el codigo fuente</span>
<span style="color:#606060;"> 15:</span>          {
<span style="color:#606060;"> 16:</span>          d=window.open();
<span style="color:#606060;"> 17:</span>          d.document.open(<span style="color:#006080;">'text/plain'</span>).write(document.documentElement.outerHTML);
<span style="color:#606060;"> 18:</span>          }
<span style="color:#606060;"> 19:</span>
<span style="color:#606060;"> 20:</span>

</script>
</head>
<body class=”BodyNormal” onactivate =”CerrarWizard();”>
<form id=”Form1″ runat=”server” >
<div style=”text-align: center” >
<asp:Label ID=”lblMensajes” runat=”server” CssClass=”labelmensaje” Width=”98%”>Cargando …</asp:Label><br />
<asp:HiddenField ID=”HiddenField1″ runat=”server” />

</div>
</form>
</body>
</html>

Tiene una simple pantalla blanca con un mensaje cargando…. (pero la idea es que prácticamente no aparezca) porque como se ve en la funcion hace en onload le asigna el valor a sData.Guardar (osea el valor oculto de la pagina madre) y despues hace un window.close.

<span style="color:#0000ff;">Protected</span> <span style="color:#0000ff;">Sub</span> Page_Load(<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.EventArgs) <span style="color:#0000ff;">Handles</span> <span style="color:#0000ff;">Me</span>.Load
<span style="color:#0000ff;">Select</span> <span style="color:#0000ff;">Case</span> Request.Params(<span style="color:#006080;">"modo"</span>)
<span style="color:#0000ff;">Case</span> <span style="color:#006080;">"modificacion"</span>
<span style="color:#0000ff;">If</span> <span style="color:#0000ff;">Not</span> <span style="color:#0000ff;">String</span>.IsNullOrEmpty(Request.Params(<span style="color:#006080;">"datos"</span>)) <span style="color:#0000ff;">Then</span>
HiddenField1.Value = Request.Params(<span style="color:#006080;">"datos"</span>)
<span style="color:#0000ff;">End</span> <span style="color:#0000ff;">If</span>
<span style="color:#0000ff;">End</span> <span style="color:#0000ff;">Select</span>
<span style="color:#0000ff;">End</span> Sub

La idea es hacer una sola pagina de fin en caso de que necesitamos varios Wizard por ejemplo para cargar Personas o Productos, etc. Todas devuelven 1 dato por ejemplo si son Wizard de Alta podrían devolver el ID a la pagina Madre para poder levantarlo desde ahí.

El proyecto completo esta aqui

Actualización del 19/1/10 Lo subí a medifire aqui.

Saludos.

25 Comments | Category: Pop-Up

Voy a mostrar una manera muy sencilla de ocultar, y poder mas adelante obtener, un ID en una grilla (GridView) en VS2005, ASP.NET 2.0.

Una vez agregada la GridView y seleccionado los campos (no uso campos automáticos) es elegir, por lo general la primer columna (columna 0), el template. Esto lo hacemos de esta manera:

foto1.jpg

Entonces el código de HTML nos quedaría así:

<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;">&lt;</span><span style="color:#800000;">asp:GridView</span> <span style="color:#ff0000;">ID</span><span style="color:#0000ff;">="GridView1"</span> <span style="color:#ff0000;">runat</span><span style="color:#0000ff;">="server"</span> <span style="color:#ff0000;">AutoGenerateColumns</span><span style="color:#0000ff;">="False"</span> <span style="color:#ff0000;">CellPadding</span><span style="color:#0000ff;">="4"</span>
           <span style="color:#ff0000;">ForeColor</span><span style="color:#0000ff;">="#333333"</span> <span style="color:#ff0000;">GridLines</span><span style="color:#0000ff;">="None"</span><span style="color:#0000ff;">&gt;</span>
           <span style="color:#0000ff;">&lt;</span><span style="color:#800000;">FooterStyle</span> <span style="color:#ff0000;">BackColor</span><span style="color:#0000ff;">="#507CD1"</span> <span style="color:#ff0000;">Font-Bold</span><span style="color:#0000ff;">="True"</span> <span style="color:#ff0000;">ForeColor</span><span style="color:#0000ff;">="White"</span> <span style="color:#0000ff;">/&gt;</span>
           <span style="color:#0000ff;">&lt;</span><span style="color:#800000;">RowStyle</span> <span style="color:#ff0000;">BackColor</span><span style="color:#0000ff;">="#EFF3FB"</span> <span style="color:#0000ff;">/&gt;</span>
           <span style="color:#0000ff;">&lt;</span><span style="color:#800000;">EditRowStyle</span> <span style="color:#ff0000;">BackColor</span><span style="color:#0000ff;">="#2461BF"</span> <span style="color:#0000ff;">/&gt;</span>
           <span style="color:#0000ff;">&lt;</span><span style="color:#800000;">SelectedRowStyle</span> <span style="color:#ff0000;">BackColor</span><span style="color:#0000ff;">="#D1DDF1"</span> <span style="color:#ff0000;">Font-Bold</span><span style="color:#0000ff;">="True"</span> <span style="color:#ff0000;">ForeColor</span><span style="color:#0000ff;">="#333333"</span> <span style="color:#0000ff;">/&gt;</span>
           <span style="color:#0000ff;">&lt;</span><span style="color:#800000;">PagerStyle</span> <span style="color:#ff0000;">BackColor</span><span style="color:#0000ff;">="#2461BF"</span> <span style="color:#ff0000;">ForeColor</span><span style="color:#0000ff;">="White"</span> <span style="color:#ff0000;">HorizontalAlign</span><span style="color:#0000ff;">="Center"</span> <span style="color:#0000ff;">/&gt;</span>
           <span style="color:#0000ff;">&lt;</span><span style="color:#800000;">HeaderStyle</span> <span style="color:#ff0000;">BackColor</span><span style="color:#0000ff;">="#507CD1"</span> <span style="color:#ff0000;">Font-Bold</span><span style="color:#0000ff;">="True"</span> <span style="color:#ff0000;">ForeColor</span><span style="color:#0000ff;">="White"</span> <span style="color:#0000ff;">/&gt;</span>
           <span style="color:#0000ff;">&lt;</span><span style="color:#800000;">AlternatingRowStyle</span> <span style="color:#ff0000;">BackColor</span><span style="color:#0000ff;">="White"</span> <span style="color:#0000ff;">/&gt;</span>
           <span style="color:#0000ff;">&lt;</span><span style="color:#800000;">Columns</span><span style="color:#0000ff;">&gt;</span>
               <span style="color:#0000ff;">&lt;</span><span style="color:#800000;">asp:TemplateField</span> <span style="color:#ff0000;">HeaderText</span><span style="color:#0000ff;">="Cargo"</span><span style="color:#0000ff;">&gt;</span>
                   <span style="color:#0000ff;">&lt;</span><span style="color:#800000;">ItemTemplate</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;">='&lt;%# Bind("cargo") %&gt;'</span><span style="color:#0000ff;">&gt;&lt;/</span><span style="color:#800000;">asp:Label</span><span style="color:#0000ff;">&gt;</span>
                   <span style="color:#0000ff;">&lt;/</span><span style="color:#800000;">ItemTemplate</span><span style="color:#0000ff;">&gt;</span>
               <span style="color:#0000ff;">&lt;/</span><span style="color:#800000;">asp:TemplateField</span><span style="color:#0000ff;">&gt;</span>
               <span style="color:#0000ff;">&lt;</span><span style="color:#800000;">asp:BoundField</span> <span style="color:#ff0000;">DataField</span><span style="color:#0000ff;">="nomCom"</span> <span style="color:#ff0000;">HeaderText</span><span style="color:#0000ff;">="Nombre"</span> <span style="color:#0000ff;">/&gt;</span>
               <span style="color:#0000ff;">&lt;</span><span style="color:#800000;">asp:ButtonField</span> <span style="color:#ff0000;">CommandName</span><span style="color:#0000ff;">="ver"</span> <span style="color:#ff0000;">Text</span><span style="color:#0000ff;">="Ver"</span> <span style="color:#0000ff;">/&gt;</span>
           <span style="color:#0000ff;">&lt;/</span><span style="color:#800000;">Columns</span><span style="color:#0000ff;">&gt;</span>
       <span style="color:#0000ff;">&lt;/</span><span style="color:#800000;">asp:GridView</span><span style="color:#0000ff;">&gt;</span>

Dentro del Tag ItemTemplate, vamos a agregar el Label Oculto y nos va a quedar de esta manera:

<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;">&lt;</span><span style="color:#800000;">ItemTemplate</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;">="lblID"</span> <span style="color:#ff0000;">runat</span><span style="color:#0000ff;">="server"</span> <span style="color:#ff0000;">Text</span><span style="color:#0000ff;">='&lt;%# Bind("id") %&gt;'</span> <span style="color:#ff0000;">Visible</span><span style="color:#0000ff;">="false"</span><span style="color:#0000ff;">&gt;&lt;/</span><span style="color:#800000;">asp:Label</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;">='&lt;%# Bind("cargo") %&gt;'</span><span style="color:#0000ff;">&gt;&lt;/</span><span style="color:#800000;">asp:Label</span><span style="color:#0000ff;">&gt;</span>
<span style="color:#0000ff;">&lt;/</span><span style="color:#800000;">ItemTemplate</span><span style="color:#0000ff;">&gt;</span>

A la hora de llenar la Grilla es simplemente haciendo el dataBind del objeto gridview y obviamente el dataset o datatable tiene que tener la columna ID
A la hora de obtener el ID, yo voy a mostrar el código para hacerlo tanto de Javascript como desde el Servidor.
Para el Lado del Servidor:

Uso el Buttonfield de la grilla para al seleccionarlo poder mostrar el ID.

<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_RowCommand(<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.GridViewCommandEventArgs) <span style="color:#0000ff;">Handles</span> GridView1.RowCommand
      <span style="color:#0000ff;">Dim</span> idCelda <span style="color:#0000ff;">As</span> <span style="color:#0000ff;">Integer</span> = 0 <span style="color:#008000;">'Como el ID oculto esta en la 1er celda le pongo 0 (El indice de Columnas empieza desde 0)</span>
      <span style="color:#0000ff;">Select</span> <span style="color:#0000ff;">Case</span> e.CommandName
          <span style="color:#0000ff;">Case</span> <span style="color:#006080;">"ver"</span>
              <span style="color:#0000ff;">Dim</span> indice <span style="color:#0000ff;">As</span> <span style="color:#0000ff;">Integer</span> = e.CommandArgument <span style="color:#008000;">' Me paro en la row que hizo click</span>
              <span style="color:#0000ff;">Dim</span> row <span style="color:#0000ff;">As</span> GridViewRow
              row = GridView1.Rows(indice) <span style="color:#008000;">' la busco en la Grilla</span>
              lblIDSeleccion.Text = <span style="color:#006080;">""</span>
              lblIDSeleccion.Text = Convert.ToInt32(<span style="color:#0000ff;">CType</span>(row.FindControl(<span style="color:#006080;">"lblID"</span>), Label).Text) <span style="color:#008000;">' encuentro el id oculto en el Label (lblID) y se lo asigno a un objeto Label</span>
      <span style="color:#0000ff;">End</span> <span style="color:#0000ff;">Select</span>
  <span style="color:#0000ff;">End</span> Sub

Para el Lado del Cliente:
Bueno hay varias maneras pero yo voy a inyectar JS al momento de hacer el RowDatabound de la grilla ósea en el momento de llenar fila por fila.
Del lado del Servidor sería esta código:

<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
       <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> = 0
           <span style="color:#0000ff;">Dim</span> lbl <span style="color:#0000ff;">As</span> Label
           <span style="color:#0000ff;">Dim</span> objButton <span style="color:#0000ff;">As</span> LinkButton
           <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)
           lbl = <span style="color:#0000ff;">CType</span>(gvrow.Cells(idCelda).FindControl(<span style="color:#006080;">"lblID"</span>), Label)
           objButton = <span style="color:#0000ff;">CType</span>(gvrow.Cells(2).Controls(0), LinkButton) <span style="color:#008000;">'Columna 2 control 0 asi me paro en la ultima columna</span>
           objButton.Attributes.Add(<span style="color:#006080;">"onclick"</span>, <span style="color:#006080;">"javascript:return Ejecutar('"</span> &amp; lbl.Text &amp; <span style="color:#006080;">"')"</span>)
       <span style="color:#0000ff;">End</span> <span style="color:#0000ff;">If</span>
   <span style="color:#0000ff;">End</span> Sub

y como se ve hay una inyección de JS de la función Ejecutar que ahí va el simplisimo codigo:

<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;">&lt;</span><span style="color:#800000;">script</span> <span style="color:#ff0000;">language</span> =<span style="color:#ff0000;">javascript</span> <span style="color:#0000ff;">&gt;</span>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;background-color:white;border-style:none;margin:0;padding:0;"><span style="color:#606060;">   1:</span>
<span style="color:#606060;">   2:</span> <span style="color:#0000ff;">function</span> Ejecutar(id)
<span style="color:#606060;">   3:</span> {
<span style="color:#606060;">   4:</span> alert (<span style="color:#006080;">'El ID Seleccionado es: '</span> +id);
<span style="color:#606060;">   5:</span> <span style="color:#0000ff;">return</span> <span style="color:#0000ff;">false</span>;
<span style="color:#606060;">   6:</span> }

</script>

Descargar el proyecto aqui.

Es una manera muy simple de ocultarlo y es agradable a la vista del usuario que no vea un número que en definitiva a él no le significa nada.

Saludos

2 Comments | Category: GridView

23 ene

Llenar un DropDownList en una GridView

Hay una manera muy simple de llenar un combo, ya sea con los mismo valores o con distintos, en cada fila de una GridView en ASP.NET 2.0 (VS 2005). Lo primero que hay que hacer es (obviamente) dropear una gridview en la pagina y al insertar las columnas a la que queremos que sea nuestro combo la convertimos en Template de esta manera:

foto1.jpg

Hecho esto vamos a editar nuestro Template asi:
foto2.jpg

SIN USAR EDITITEMTEMPLATE

Dentro de ItemTemplate vamos a eliminar el Label que nos viene por defecto y dropear un DropDownList, no hace falta hacerlo en EditTemplate. Nos queda algo asi:
foto3.jpg

Al termina la edición nos queda algo asi:
foto4.jpg

Ahora nos pasamos a la parte HTML de la pagina para ver como nos queda la grilla:

<div>
<pre style="overflow:visible;background-color:#f4f4f4;font-family:Consolas,'Courier New',Courier,Monospace;font-size:8pt;line-height:12pt;color:black;width:90%;border-style:none;margin:0;padding:0;"><span style="color:#0000ff;">&lt;</span><span style="color:#800000;">asp:GridView</span> <span style="color:#ff0000;">ID</span><span style="color:#0000ff;">="GridView1"</span> <span style="color:#ff0000;">runat</span><span style="color:#0000ff;">="server"</span> <span style="color:#ff0000;">AutoGenerateColumns</span><span style="color:#0000ff;">="False"</span> <span style="color:#ff0000;">CellPadding</span><span style="color:#0000ff;">="4"</span>

           <span style="color:#ff0000;">ForeColor</span><span style="color:#0000ff;">="#333333"</span> <span style="color:#ff0000;">GridLines</span><span style="color:#0000ff;">="None"</span><span style="color:#0000ff;">&gt;</span>

           <span style="color:#0000ff;">&lt;</span><span style="color:#800000;">FooterStyle</span> <span style="color:#ff0000;">BackColor</span><span style="color:#0000ff;">="#507CD1"</span> <span style="color:#ff0000;">Font-Bold</span><span style="color:#0000ff;">="True"</span> <span style="color:#ff0000;">ForeColor</span><span style="color:#0000ff;">="White"</span> <span style="color:#0000ff;">/&gt;</span>

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

               <span style="color:#0000ff;">&lt;</span><span style="color:#800000;">asp:BoundField</span> <span style="color:#ff0000;">DataField</span><span style="color:#0000ff;">="nomCom"</span> <span style="color:#ff0000;">HeaderText</span><span style="color:#0000ff;">="Nombre"</span> <span style="color:#0000ff;">/&gt;</span>

               <span style="color:#0000ff;">&lt;</span><span style="color:#800000;">asp:TemplateField</span> <span style="color:#ff0000;">HeaderText</span><span style="color:#0000ff;">="Cargo"</span><span style="color:#0000ff;">&gt;</span>

                   <span style="color:#0000ff;">&lt;</span><span style="color:#800000;">EditItemTemplate</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;</span>

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

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

                       <span style="color:#0000ff;">&lt;</span><span style="color:#800000;">asp:DropDownList</span> <span style="color:#ff0000;">ID</span><span style="color:#0000ff;">="DropDownList1"</span> <span style="color:#ff0000;">runat</span><span style="color:#0000ff;">="server"</span> <span style="color:#ff0000;">Width</span><span style="color:#0000ff;">="179px"</span> <span style="color:#ff0000;">DataTextField</span><span style="color:#0000ff;">="CARGO"</span> <span style="color:#ff0000;">DataValueField</span><span style="color:#0000ff;">="ID"</span><span style="color:#0000ff;">&gt;</span>

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

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

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

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

           <span style="color:#0000ff;">&lt;</span><span style="color:#800000;">RowStyle</span> <span style="color:#ff0000;">BackColor</span><span style="color:#0000ff;">="#EFF3FB"</span> <span style="color:#0000ff;">/&gt;</span>

           <span style="color:#0000ff;">&lt;</span><span style="color:#800000;">EditRowStyle</span> <span style="color:#ff0000;">BackColor</span><span style="color:#0000ff;">="#2461BF"</span> <span style="color:#0000ff;">/&gt;</span>

           <span style="color:#0000ff;">&lt;</span><span style="color:#800000;">SelectedRowStyle</span> <span style="color:#ff0000;">BackColor</span><span style="color:#0000ff;">="#D1DDF1"</span> <span style="color:#ff0000;">Font-Bold</span><span style="color:#0000ff;">="True"</span> <span style="color:#ff0000;">ForeColor</span><span style="color:#0000ff;">="#333333"</span> <span style="color:#0000ff;">/&gt;</span>

           <span style="color:#0000ff;">&lt;</span><span style="color:#800000;">PagerStyle</span> <span style="color:#ff0000;">BackColor</span><span style="color:#0000ff;">="#2461BF"</span> <span style="color:#ff0000;">ForeColor</span><span style="color:#0000ff;">="White"</span> <span style="color:#ff0000;">HorizontalAlign</span><span style="color:#0000ff;">="Center"</span> <span style="color:#0000ff;">/&gt;</span>

           <span style="color:#0000ff;">&lt;</span><span style="color:#800000;">HeaderStyle</span> <span style="color:#ff0000;">BackColor</span><span style="color:#0000ff;">="#507CD1"</span> <span style="color:#ff0000;">Font-Bold</span><span style="color:#0000ff;">="True"</span> <span style="color:#ff0000;">ForeColor</span><span style="color:#0000ff;">="White"</span> <span style="color:#0000ff;">/&gt;</span>

           <span style="color:#0000ff;">&lt;</span><span style="color:#800000;">AlternatingRowStyle</span> <span style="color:#ff0000;">BackColor</span><span style="color:#0000ff;">="White"</span> <span style="color:#0000ff;">/&gt;</span>

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

En mi caso todos los combos se llenan con la misma información por eso agrego el DataTextField ahí, esto se podría hacer del lado servidor.
Ahora lo mas importante del código esta en el evento RowDataBound de la grilla y es algo muy simple:

<div>
<pre style="overflow:visible;background-color:#f4f4f4;font-family:Consolas,'Courier New',Courier,Monospace;font-size:8pt;line-height:12pt;color:black;width:100%;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        <span style="color:#0000ff;">Try</span>

            <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> ddl <span style="color:#0000ff;">As</span> DropDownList

                <span style="color:#0000ff;">Dim</span> dt2 <span style="color:#0000ff;">As</span> DataTable = LlenarTabla2()

                <span style="color:#008000;">'Celda 1 es donde esta el DropdownList</span>

                <span style="color:#0000ff;">Dim</span> gvrow <span style="color:#0000ff;">As</span> GridViewRow = <span style="color:#0000ff;">CType</span>(e.Row.Cells(1).NamingContainer, GridViewRow)

                ddl = <span style="color:#0000ff;">CType</span>(gvrow.FindControl(<span style="color:#006080;">"DropDownList1"</span>), DropDownList)

                ddl.ClearSelection()

<span style="color:#0000ff;">If</span> ddl IsNot DBNull.Value <span style="color:#0000ff;">Then</span>

                    ddl.DataSource = dt2

                    ddl.DataBind() <span style="color:#008000;">'Lleno el combo</span>

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

                <span style="color:#008000;">'Después de llenar el combo se puede asignar el valor si es que tenia uno</span>

                <span style="color:#008000;">'aca haciendo ddl.ddl.SelectedValue =...</span>

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

        <span style="color:#0000ff;">Catch</span> ex <span style="color:#0000ff;">As</span> Exception

            <span style="color:#0000ff;">Throw</span> ex

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

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

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

Al ejecutar el proyecto la pagina nos queda de esta manera.

foto5.jpg

Adjunto el proyecto aqui.

USANDO EDITITEMTEMPLATE

También se pueden usar las hermosas características que nos proporciona .NET 2.0 y usar la columna CommandField con los botones de Editar y Actualizar.

En este caso el HTML nos quedaría de esta manera:

<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;">&lt;</span><span style="color:#800000;">asp:GridView</span>  <span style="color:#ff0000;">ID</span><span style="color:#0000ff;">="GridView2"</span>  <span style="color:#ff0000;">runat</span><span style="color:#0000ff;">="server"</span>

            <span style="color:#ff0000;">OnRowCancelingEdit</span><span style="color:#0000ff;">="GridView2_RowCancelingEdit"</span>  <span style="color:#ff0000;">OnRowEditing</span><span style="color:#0000ff;">="GridView2_RowEditing"</span>

            <span style="color:#ff0000;">DataKeyNames</span><span style="color:#0000ff;">="ID"</span>  <span style="color:#ff0000;">OnRowUpdating</span><span style="color:#0000ff;">="GridView2_RowUpdating"</span>  <span style="color:#ff0000;">OnRowUpdated</span><span style="color:#0000ff;">="GridView2_RowUpdated"</span>

            <span style="color:#ff0000;">ShowFooter</span><span style="color:#0000ff;">="True"</span>  <span style="color:#ff0000;">CellPadding</span><span style="color:#0000ff;">="4"</span> <span style="color:#ff0000;">ForeColor</span><span style="color:#0000ff;">="#333333"</span> <span style="color:#ff0000;">GridLines</span><span style="color:#0000ff;">="None"</span> <span style="color:#ff0000;">AutoGenerateColumns</span><span style="color:#0000ff;">="False"</span> <span style="color:#0000ff;">&gt;</span>

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

                <span style="color:#0000ff;">&lt;</span><span style="color:#800000;">asp:BoundField</span> <span style="color:#ff0000;">DataField</span><span style="color:#0000ff;">="nomCom"</span> <span style="color:#ff0000;">HeaderText</span><span style="color:#0000ff;">="Nombre"</span> <span style="color:#0000ff;">/&gt;</span>

                <span style="color:#0000ff;">&lt;</span><span style="color:#800000;">asp:TemplateField</span> <span style="color:#ff0000;">HeaderText</span><span style="color:#0000ff;">="Cargo"</span><span style="color:#0000ff;">&gt;</span>

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

                        <span style="color:#0000ff;">&lt;</span><span style="color:#800000;">asp:DropDownList</span> <span style="color:#ff0000;">ID</span><span style="color:#0000ff;">="DropDownList1"</span> <span style="color:#ff0000;">runat</span><span style="color:#0000ff;">="server"</span> <span style="color:#ff0000;">Width</span><span style="color:#0000ff;">="179px"</span> <span style="color:#ff0000;">DataTextField</span><span style="color:#0000ff;">="CARGO"</span> <span style="color:#ff0000;">DataValueField</span><span style="color:#0000ff;">="ID"</span><span style="color:#0000ff;">&gt;</span>

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

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

                    <span style="color:#0000ff;">&lt;</span><span style="color:#800000;">ItemTemplate</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;">="CargoText"</span> <span style="color:#ff0000;">runat</span><span style="color:#0000ff;">="server"</span> <span style="color:#ff0000;">Text</span><span style="color:#0000ff;">='&lt;%# Eval("Cargo") %&gt;'</span><span style="color:#0000ff;">&gt;&lt;/</span><span style="color:#800000;">asp:Label</span><span style="color:#0000ff;">&gt;</span>

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

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

                <span style="color:#0000ff;">&lt;</span><span style="color:#800000;">asp:CommandField</span> <span style="color:#ff0000;">ShowEditButton</span><span style="color:#0000ff;">="True"</span> <span style="color:#ff0000;">EditText</span><span style="color:#0000ff;">="Editar"</span> <span style="color:#0000ff;">/&gt;</span>

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

             <span style="color:#0000ff;">&lt;</span><span style="color:#800000;">FooterStyle</span> <span style="color:#ff0000;">BackColor</span><span style="color:#0000ff;">="#1C5E55"</span> <span style="color:#ff0000;">Font-Bold</span><span style="color:#0000ff;">="True"</span> <span style="color:#ff0000;">ForeColor</span><span style="color:#0000ff;">="White"</span> <span style="color:#0000ff;">/&gt;</span>

             <span style="color:#0000ff;">&lt;</span><span style="color:#800000;">RowStyle</span> <span style="color:#ff0000;">BackColor</span><span style="color:#0000ff;">="#E3EAEB"</span> <span style="color:#0000ff;">/&gt;</span>

             <span style="color:#0000ff;">&lt;</span><span style="color:#800000;">EditRowStyle</span> <span style="color:#ff0000;">BackColor</span><span style="color:#0000ff;">="#7C6F57"</span> <span style="color:#0000ff;">/&gt;</span>

             <span style="color:#0000ff;">&lt;</span><span style="color:#800000;">SelectedRowStyle</span> <span style="color:#ff0000;">BackColor</span><span style="color:#0000ff;">="#C5BBAF"</span> <span style="color:#ff0000;">Font-Bold</span><span style="color:#0000ff;">="True"</span> <span style="color:#ff0000;">ForeColor</span><span style="color:#0000ff;">="#333333"</span> <span style="color:#0000ff;">/&gt;</span>

             <span style="color:#0000ff;">&lt;</span><span style="color:#800000;">PagerStyle</span> <span style="color:#ff0000;">BackColor</span><span style="color:#0000ff;">="#666666"</span> <span style="color:#ff0000;">ForeColor</span><span style="color:#0000ff;">="White"</span> <span style="color:#ff0000;">HorizontalAlign</span><span style="color:#0000ff;">="Center"</span> <span style="color:#0000ff;">/&gt;</span>

             <span style="color:#0000ff;">&lt;</span><span style="color:#800000;">HeaderStyle</span> <span style="color:#ff0000;">BackColor</span><span style="color:#0000ff;">="#1C5E55"</span> <span style="color:#ff0000;">Font-Bold</span><span style="color:#0000ff;">="True"</span> <span style="color:#ff0000;">ForeColor</span><span style="color:#0000ff;">="White"</span> <span style="color:#0000ff;">/&gt;</span>

             <span style="color:#0000ff;">&lt;</span><span style="color:#800000;">AlternatingRowStyle</span> <span style="color:#ff0000;">BackColor</span><span style="color:#0000ff;">="White"</span> <span style="color:#0000ff;">/&gt;</span>

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

La primer diferencia es que el Dropdownlist ahora está dentro de una Tag edititemtemplate, esto es porque el combo no va aparecer desde un principio con el ejemplo anterior sino que solo se va a renderear para la row que quiera editar. Y que se mostrará en su lugar? Buena pregunta, para eso está el ItemTemplate que muestra algo por defecto en todas las rows o como en mi caso el valor de "Cargo" (esto va a salir del datatable que llenará la grilla, le agrego un valor por defecto).

Ahora vamos al código en VB en este caso no solo voy a necesitar RowDataBound sino también el evento RowEditing (el que entrará en acción cuando el usuario de click a la row):

<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;">Partial <span style="color:#0000ff;">Class</span> _Default

    <span style="color:#0000ff;">Inherits</span> System.Web.UI.Page

    <span style="color:#0000ff;">Dim</span> dt1 <span style="color:#0000ff;">As</span> DataTable = LlenarTabla1()

    <span style="color:#0000ff;">Dim</span> ht <span style="color:#0000ff;">As</span> Hashtable

    <span style="color:#0000ff;">Dim</span> flag <span style="color:#0000ff;">As</span> <span style="color:#0000ff;">Boolean</span> = <span style="color:#0000ff;">False</span><span style="color:#0000ff;">Protected</span> <span style="color:#0000ff;">Sub</span> Page_Load(<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.EventArgs) <span style="color:#0000ff;">Handles</span> <span style="color:#0000ff;">Me</span>.Load

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

            <span style="color:#0000ff;">If</span> <span style="color:#0000ff;">Not</span> Page.IsPostBack <span style="color:#0000ff;">Then</span>

                dBindData()

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

        <span style="color:#0000ff;">Catch</span> ex <span style="color:#0000ff;">As</span> Exception

            <span style="color:#0000ff;">Throw</span> ex

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

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

<span style="color:#0000ff;">Sub</span> dBindData()

      GridView2.DataSource = dt1

      GridView2.DataBind()

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

<span style="color:#0000ff;">Protected</span> <span style="color:#0000ff;">Sub</span> GridView2_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> GridView2.RowDataBound

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

           <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> ddl <span style="color:#0000ff;">As</span> DropDownList

               <span style="color:#0000ff;">Dim</span> dt2 <span style="color:#0000ff;">As</span> DataTable = LlenarTabla2()

               <span style="color:#008000;">'Celda 1 es donde esta el DropdownList</span>

               <span style="color:#0000ff;">Dim</span> gvrow <span style="color:#0000ff;">As</span> GridViewRow = <span style="color:#0000ff;">CType</span>(e.Row.Cells(1).NamingContainer, GridViewRow)

               ddl = <span style="color:#0000ff;">CType</span>(gvrow.FindControl(<span style="color:#006080;">"DropDownList1"</span>), DropDownList)

<span style="color:#0000ff;">If</span> ddl IsNot <span style="color:#0000ff;">Nothing</span> <span style="color:#0000ff;">Then</span>

                   ddl.ClearSelection()

                   <span style="color:#0000ff;">If</span> ddl IsNot DBNull.Value <span style="color:#0000ff;">Then</span>

                       ddl.DataSource = dt2

                       ddl.DataBind() <span style="color:#008000;">'Lleno el combo</span>

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

                   <span style="color:#0000ff;">If</span> flag = <span style="color:#0000ff;">True</span> <span style="color:#0000ff;">Then</span>

                       <span style="color:#008000;">'si no esta vacio la hashtable se lo asigno al combo</span>

                       <span style="color:#0000ff;">If</span> <span style="color:#0000ff;">Not</span> <span style="color:#0000ff;">String</span>.IsNullOrEmpty(ht.Item(1)) <span style="color:#0000ff;">Then</span> ddl.SelectedValue = ddl.Items.FindByText(ht.Item(1)).Value

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

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

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

       <span style="color:#0000ff;">Catch</span> ex <span style="color:#0000ff;">As</span> Exception

           <span style="color:#0000ff;">Throw</span> ex

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

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

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

<span style="color:#0000ff;">Protected</span> <span style="color:#0000ff;">Sub</span> GridView2_RowEditing(<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.GridViewEditEventArgs) <span style="color:#0000ff;">Handles</span> GridView2.RowEditing

       <span style="color:#0000ff;">Dim</span> idIndex <span style="color:#0000ff;">As</span> <span style="color:#0000ff;">Integer</span> = e.NewEditIndex

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

           GridView2.EditIndex = idIndex

           <span style="color:#0000ff;">Dim</span> lblTexto <span style="color:#0000ff;">As</span> Label = GridView2.Rows(idIndex).Cells(1).FindControl(<span style="color:#006080;">"CargoText"</span>)

           <span style="color:#0000ff;">Dim</span> ddl <span style="color:#0000ff;">As</span> DropDownList = GridView2.Rows(idIndex).Cells(1).FindControl(<span style="color:#006080;">"DropDownList1"</span>)

           <span style="color:#0000ff;">If</span> lblTexto IsNot <span style="color:#0000ff;">Nothing</span> <span style="color:#0000ff;">Then</span>

               <span style="color:#008000;">'Guardo un Hash con el valor que tiene el Label</span>

               ht = <span style="color:#0000ff;">New</span> Hashtable

               <span style="color:#008000;">'siempre en el value 1 porque lo voy a usar solo para un valor</span>

               ht.Add(1, lblTexto.Text)

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

           <span style="color:#008000;">'uso el flag para saber cuando esta rendereando </span>

           <span style="color:#008000;">'el EditTemplate y no el Itemtemplate</span>

           <span style="color:#0000ff;">If</span> ddl IsNot <span style="color:#0000ff;">Nothing</span> <span style="color:#0000ff;">Then</span> flag = <span style="color:#0000ff;">True</span>

           GridView2.DataSource = LlenarTabla1()

           GridView2.DataBind()

       <span style="color:#0000ff;">Catch</span> ex <span style="color:#0000ff;">As</span> Exception

           <span style="color:#0000ff;">Throw</span> ex

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

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

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

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

Uso una HashTable para almacenar el valor que voy a tener que setear en el DropDownList una vez seleccionado, sino siempre mostraría el 1er valor del Combo.

Dejo este 2do ejemplo para descargar aca

Saludos.

29 Comments | Category: GridView