Foros del Web » Programando para Internet » ASPX (.net) »

Abrir nueva págna con un DataGrid

Estas en el tema de Abrir nueva págna con un DataGrid en el foro de ASPX (.net) en Foros del Web. Hola!!! Tengo un problema no se como generar una nueva ventana en base a un Gridview. Por ejemplo: Al darle clic a un campo HyperLink ...
  #1 (permalink)  
Antiguo 08/11/2011, 09:52
Avatar de stuart_david3  
Fecha de Ingreso: agosto-2011
Mensajes: 215
Antigüedad: 13 años, 2 meses
Puntos: 1
Pregunta Abrir nueva págna con un DataGrid

Hola!!! Tengo un problema no se como generar una nueva ventana en base a un Gridview. Por ejemplo: Al darle clic a un campo HyperLink en mi GridView me genera un DataGrid con las insidencias del empleado que elegí con el HyperLink (ese empleado lo guardo en la variable "cadena" con el SelectedRow de mi GrridView). Eso hasta el momento gracias a Dios lo tengo, ahora quisiera saber cómo hacerle para que el DataGrid que genero me lo haga en una ventana nueva... Aquí les dejo el código...

Código ASP:
Ver original
  1. <%@ Page language="VB" %>
  2. <%@ Import Namespace="System.Data" %>
  3. <%@ Import Namespace="System.Data.SqlClient" %>
  4. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  5.     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  6.  
  7. <script runat="server">
  8.  
  9.   Sub CustomersGridView_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs)
  10.  
  11.     ' Get the currently selected row using the SelectedRow property.
  12.     Dim row As GridViewRow = CustomersGridView.SelectedRow
  13.  
  14.     ' Display the company name from the selected row.
  15.     ' In this example, the third column (index 2) contains
  16.         ' the company name.
  17.         Dim cadena As String = row.Cells(1).Text
  18.         Dim MyConnection As SqlConnection = New SqlConnection("connectionstring="server=myhost;database=mydb;User ID=myuser;Password=mypass;Trusted_Connection=no")
  19.         Dim MyCommand As SqlCommand = New SqlCommand("SELECT rpe as RPE_del_Empleado, convert(varchar,fe_inic,103) as Fecha_de_la_Incidencia, cl_incid AS Tipo_de_Incidencia FROM b_asiste WHERE cl_incid='026' AND rpe='" & cadena & "' GROUP BY rpe, cl_incid, fe_inic", MyConnection)
  20.  
  21.         MyConnection.Open()
  22.  
  23.         Dim dr As SqlDataReader = MyCommand.ExecuteReader()
  24.         MyDataGrid.DataSource = dr
  25.         MyDataGrid.DataBind()
  26.        
  27.         If cadena = "" Then
  28.             Label1.Text = "Has seleccionado a " & cadena & ""
  29.         Else
  30.             Label2.Text = "Has seleccionado a " & cadena & ". No existen incidencias para este empleado"
  31.         End If
  32.        
  33.     End Sub
  34.  
  35.     Sub CustomersGridView_SelectedIndexChanging(ByVal sender As Object, ByVal e As GridViewSelectEventArgs)
  36.  
  37.         ' Get the currently selected row. Because the SelectedIndexChanging event
  38.         ' occurs before the select operation in the GridView control, the
  39.         ' SelectedRow property cannot be used. Instead, use the Rows collection
  40.         ' and the NewSelectedIndex property of the e argument passed to this
  41.         ' event handler.
  42.         Dim row As GridViewRow = CustomersGridView.Rows(e.NewSelectedIndex)
  43.  
  44.         ' You can cancel the select operation by using the Cancel
  45.         ' property. For this example, if the user selects a customer with
  46.         ' the ID "ANATR", the select operation is canceled and an error message
  47.         ' is displayed.
  48.         If row.Cells(1).Text = "ANATR" Then
  49.  
  50.             e.Cancel = True
  51.             Label2.Text = "You cannot select " + row.Cells(1).Text & "."
  52.  
  53.         End If
  54.  
  55.     End Sub
  56.  
  57. </script>
  58.  
  59. <html xmlns="http://www.w3.org/1999/xhtml" >
  60.   <head id="Head1" runat="server">
  61.     <title>GridView Select Example</title>
  62. </head>
  63. <body>
  64.     <form id="form1" runat="server">
  65.  
  66.      <h3>Trabajadores jubilables mayores de 55 años con más de 25 años trabajando</h3>
  67.  
  68.      <asp:gridview id="CustomersGridView"
  69.        datasourceid="CustomersSource"
  70.        autogeneratecolumns="False"
  71.        autogenerateselectbutton="True"
  72.        allowpaging="True"
  73.        selectedindex="1"
  74.        onselectedindexchanged="CustomersGridView_SelectedIndexChanged"
  75.        onselectedindexchanging="CustomersGridView_SelectedIndexChanging"  
  76.        runat="server" DataKeyNames="rpe" BackColor="LightGoldenrodYellow"
  77.          BorderColor="Tan" BorderWidth="1px" CellPadding="2" ForeColor="Black"
  78.          GridLines="None">
  79.  
  80.          <AlternatingRowStyle BackColor="PaleGoldenrod" />
  81.  
  82.          <Columns>
  83.              <asp:BoundField DataField="rpe"
  84.                  HeaderText="RPE del Empleado"
  85.                  InsertVisible="False" ReadOnly="True"
  86.                  SortExpression="b_contra.fe_repro" />
  87.              <asp:BoundField DataField="nombre"
  88.                  HeaderText="Nombre del Empleado"
  89.                  SortExpression="c_zonas.nombre" />
  90.              <asp:BoundField DataField="Edad"
  91.                  HeaderText="Edad del Empleado"
  92.                  SortExpression="fe_inic" />
  93.                  <asp:BoundField DataField="nombrezona"
  94.                  HeaderText="Nombre de la Zona"
  95.                  SortExpression="fe_inic" />
  96.                  <asp:BoundField DataField="area"
  97.                  HeaderText="Area en que labora"
  98.                  SortExpression="fe_inic" />
  99.                  <asp:BoundField DataField="puesto"
  100.                  HeaderText="Puesto"
  101.                  SortExpression="fe_inic" />
  102.                  <asp:BoundField DataField="fe_natra"
  103.                  HeaderText="Fecha de Nacimiento"
  104.                  SortExpression="fe_inic" />
  105.                  <asp:BoundField DataField="fe_antre"
  106.                  HeaderText="Fecha de Antigüedad Reconocida"
  107.                  SortExpression="fe_inic" />
  108.                  <asp:BoundField DataField="fe_ingre"
  109.                  HeaderText="Fecha de Ingreso"
  110.                  SortExpression="fe_inic" />
  111.                  <asp:BoundField DataField="ubicacion"
  112.                  HeaderText="Ubicación"
  113.                  SortExpression="fe_inic" />
  114.                  <asp:BoundField DataField="nides"
  115.                  HeaderText="nides"
  116.                  SortExpression="fe_inic" />
  117.                  <asp:BoundField DataField="nire"
  118.                  HeaderText="nire"
  119.                  SortExpression="fe_inic" />
  120.                  <asp:BoundField DataField="fe"
  121.                  HeaderText="Fecha Probable de Jubilación"
  122.                  SortExpression="fe_inic" />
  123.                  <asp:BoundField DataField="anyjub"
  124.                  HeaderText="Años Transcurridos Desde la jubilación"
  125.                  SortExpression="fe_inic" />
  126.                  <asp:BoundField DataField="fepos"
  127.                  HeaderText="Fecha Probable Para Jubilación"
  128.                  SortExpression="fe_inic" />
  129.          </Columns>
  130.  
  131.          <FooterStyle BackColor="Tan" />
  132.          <HeaderStyle BackColor="Tan" Font-Bold="True" />
  133.          <PagerStyle BackColor="PaleGoldenrod" ForeColor="DarkSlateBlue"
  134.              HorizontalAlign="Center" />
  135.  
  136.        <selectedrowstyle backcolor="DarkSlateBlue"
  137.          forecolor="GhostWhite"/>  
  138.  
  139.          <SortedAscendingCellStyle BackColor="#FAFAE7" />
  140.          <SortedAscendingHeaderStyle BackColor="#DAC09E" />
  141.          <SortedDescendingCellStyle BackColor="#E1DB9C" />
  142.          <SortedDescendingHeaderStyle BackColor="#C2A47B" />
  143.  
  144.      </asp:gridview>
  145.  
  146.       <br/>
  147.          <asp:label id="Label1"
  148.         forecolor="Red"
  149.         runat="server"/>
  150.          <asp:label id="Label2"
  151.         forecolor="Red"
  152.         runat="server"/>
  153.  
  154.       <!-- This example uses Microsoft SQL Server and connects  -->
  155.       <!-- to the Northwind sample database. Use an ASP.NET     -->
  156.       <!-- expression to retrieve the connection string value   -->
  157.       <!-- from the Web.config file.                            -->
  158.       <asp:sqldatasource id="CustomersSource"
  159.         selectcommand="SELECT MAX(b_contra.fe_repro), MAX(c_zonas.nombre) AS nombrezona, MAX(c_puesto.puesto) AS puesto, MAX(c_a_resp.dscarea) AS area, b_traba1.rpe, MAX(b_traba1.nombre) AS nombre, b_traba1.fe_antre, b_traba1.fe_ingre, b_traba3.fe_natra, CONVERT (INT,(DATEDIFF (dd, b_traba3.fe_natra, GETDATE()) - DATEDIFF (yy, b_traba3.fe_natra, GETDATE()) / 4.25) / 365) AS Edad, MAX(b_traba1.sexotrab) AS sexo, MAX(c_ubica.ubicapza) AS ubicacion, MAX(b_traba1.cl_nides) AS nides, MAX(b_traba1.if_nire2) AS nire, fe, CASE WHEN fe<GETDATE() THEN GETDATE() ELSE null END AS fepos, CONVERT (INT,(DATEDIFF (dd, GETDATE(), fe) - DATEDIFF (yy, GETDATE(), fe) / 4.25) / 365) AS anyjub FROM (SELECT fe_antre, CASE WHEN b_traba1.sexotrab='M' THEN DATEADD(yy, 30, b_traba1.fe_antre) ELSE DATEADD(yy, 25, b_traba1.fe_antre) END AS fe FROM b_traba1) AS t1, b_traba1, b_traba3, c_zonas, c_a_resp, c_ubica, c_puesto, b_contra WHERE (DATEDIFF(yy, b_traba1.fe_antre, GETDATE()) > 25) AND (DATEDIFF(yy, b_traba3.fe_natra, GETDATE()) > 55) AND b_traba1.cl_sitla IS NULL AND c_zonas.descr=b_traba1.cl_zona AND c_a_resp.area=b_traba1.area AND b_traba1.rpe=b_traba3.rpe AND b_traba1.rpe=b_contra.rpe AND c_puesto.cl_puest=b_contra.cl_puest AND b_traba1.fe_antre=t1.fe_antre AND b_traba1.cl_ubica=c_ubica.cl_ubica GROUP BY b_traba1.rpe, b_traba1.fe_antre, b_traba1.fe_ingre, b_traba3.fe_natra, fe"
  160.         connectionstring="server=myhost;database=mydb;User ID=myuser;Password=mypass;Trusted_Connection=no"
  161.         runat="server"/>
  162.     <ASP:DataGrid id="MyDataGrid" runat="server"
  163.     Width="700px"
  164.     BackColor="LightGoldenrodYellow"
  165.     BorderColor="Tan"
  166.     CellPadding=2
  167.     Font-Name="Verdana"
  168.     Font-Size="8pt"
  169.     HeaderStyle-BackColor="#aaaadd"
  170.     EnableViewState="False" BorderWidth="1px" Font-Names="Verdana"
  171.          ForeColor="Black" GridLines="None"
  172.   >
  173.         <AlternatingItemStyle BackColor="PaleGoldenrod" />
  174.         <FooterStyle BackColor="Tan" />
  175. <HeaderStyle BackColor="Tan" Font-Bold="True"></HeaderStyle>
  176.         <PagerStyle BackColor="PaleGoldenrod" ForeColor="DarkSlateBlue"
  177.             HorizontalAlign="Center" />
  178.         <SelectedItemStyle BackColor="DarkSlateBlue" ForeColor="GhostWhite" />
  179.      </asp:DataGrid>
  180.     </form>
  181.    
  182.   </body>
  183. </html>

Gracias de antemano...
  #2 (permalink)  
Antiguo 08/11/2011, 10:04
Avatar de rafa2300  
Fecha de Ingreso: octubre-2011
Mensajes: 24
Antigüedad: 13 años, 1 mes
Puntos: 3
Respuesta: Abrir nueva págna con un DataGrid

no se si esto resuelva tu duda pero yo lo aria asi
Response.Redirect("www.google.com?target=mimarco")
  #3 (permalink)  
Antiguo 08/11/2011, 10:08
Avatar de stuart_david3  
Fecha de Ingreso: agosto-2011
Mensajes: 215
Antigüedad: 13 años, 2 meses
Puntos: 1
Respuesta: Abrir nueva págna con un DataGrid

Gracias rafa2300 el problema es que no puedo solo "linkearme" a otra página, el problema es cómo le puedo hacer referencia a mi variable "cadena" mediante la cual le digo a mi nueva consulta que me genere el nuevo DataGrid en base a dicha variable ...

Código ASP:
Ver original
  1. Dim cadena As String = row.Cells(1).Text
  2.         Dim MyCommand As SqlCommand = New SqlCommand("SELECT rpe as RPE_del_Empleado, convert(varchar,fe_inic,103) as Fecha_de_la_Incidencia, cl_incid AS Tipo_de_Incidencia FROM b_asiste WHERE cl_incid='026' AND rpe='" & cadena & "' GROUP BY rpe, cl_incid, fe_inic", MyConnection)
  #4 (permalink)  
Antiguo 08/11/2011, 10:36
Avatar de rafa2300  
Fecha de Ingreso: octubre-2011
Mensajes: 24
Antigüedad: 13 años, 1 mes
Puntos: 3
Respuesta: Abrir nueva págna con un DataGrid

y si guardas el valor de la cadena en una variable global que te lo cargue en tu nueva pagina
  #5 (permalink)  
Antiguo 08/11/2011, 11:08
Avatar de stuart_david3  
Fecha de Ingreso: agosto-2011
Mensajes: 215
Antigüedad: 13 años, 2 meses
Puntos: 1
Respuesta: Abrir nueva págna con un DataGrid

Pero como la puedo crear, leí que se tiene que declarar en el Web.config de esta manera:

<appSettings>

<add key="username" value="valor" />

</appSettings>


Pero en "valor" le que le pongo??...

row.Cells(1).Text

row es otra variable y también la tendría que hacer global?? ...
  #6 (permalink)  
Antiguo 08/11/2011, 11:08
Avatar de AWesker  
Fecha de Ingreso: octubre-2008
Mensajes: 177
Antigüedad: 16 años
Puntos: 27
Respuesta: Abrir nueva págna con un DataGrid

Veamos, si comprendo bien, debes abrir una nueva página (target="_blank") pero debes enviar una variable, yo te sugiero que envíes dicho valor por QueryString o POST y que lo proceses ya sea con un DataSource o con el método que creas conveniente de acuerdo a tus estándares y/o requerimientos.
  #7 (permalink)  
Antiguo 08/11/2011, 11:33
Avatar de stuart_david3  
Fecha de Ingreso: agosto-2011
Mensajes: 215
Antigüedad: 13 años, 2 meses
Puntos: 1
Respuesta: Abrir nueva págna con un DataGrid

Podrías darme un ejemplo del querystring?? o del Post??...
  #8 (permalink)  
Antiguo 08/11/2011, 15:03
Avatar de AWesker  
Fecha de Ingreso: octubre-2008
Mensajes: 177
Antigüedad: 16 años
Puntos: 27
Respuesta: Abrir nueva págna con un DataGrid

Por supuesto:

En el GridView debe existir un ItemTemplate más o menos así:

Código:
 
<asp:TemplateField HeaderText="Detalle" ItemStyle-Width="70px" HeaderStyle-Width="70px">
 <ItemTemplate>
       <asp:LinkButton ID="Lnk_Redireccionar" Style="background-color: Transparent; margin-top: -3px;"
        CommandName="Detalle" runat="server" CommandArgument='<%#Eval("Id_Detalle") %>'>
        <asp:Image ID="Img_Seleccion" runat="server" ImageUrl="~/Images/pencils/iconExams.gif" ToolTip="Ver detalles" />
       </asp:LinkButton>
 </ItemTemplate>
 <HeaderStyle Width="70px" />
 <ItemStyle HorizontalAlign="Center" />
 </asp:TemplateField>
En el GridView (en el evento RowCommand) debe haber algo así:
Código:
 
if (e.CommandName == "Detalle")
{
   Response.Redirect("~/Procesos/PaginaDetalle.aspx?Id_Det=" +   e.CommandArgument.ToString());
}
Hago esto porque me permite validar algunas cosas antes de hacer el response. Si no crees que es necesario, en el ItemTemplate podés usar un simple a href="...".

Donde Id_Det es el nombre del QueryString, mientras que e.CommandArgument contiene el valor de la varible enviada por Get.

En la página que abrirás tenés que hacer referencia al valor así:
Código:
 
Request.QueryString["Id_Det"]
Cualquier duda nos dices o si encuentras una opción alterna.
  #9 (permalink)  
Antiguo 11/11/2011, 09:24
Avatar de stuart_david3  
Fecha de Ingreso: agosto-2011
Mensajes: 215
Antigüedad: 13 años, 2 meses
Puntos: 1
Respuesta: Abrir nueva págna con un DataGrid

Muchísimas gracias AWesker Disculpa por tardar tanto en contestarte. Bueno, eh tenido detalles con el TemplateField, me dice que: El tipo 'System.Web.UI.WebControls.GridView' no tiene ninguna propiedad pública cuyo nombre sea 'TemplateField'.

Lo puse dentro del GridView como me dijiste:

Código ASP:
Ver original
  1. <asp:gridview id="CustomersGridView"
  2.        datasourceid="CustomersSource"
  3.        autogeneratecolumns="False"
  4.        autogenerateselectbutton="True"
  5.        allowpaging="True"
  6.        selectedindex="1"
  7.        onselectedindexchanged="CustomersGridView_SelectedIndexChanged"
  8.        onselectedindexchanging="CustomersGridView_SelectedIndexChanging"  
  9.        runat="server" DataKeyNames="rpe" BackColor="LightGoldenrodYellow"
  10.          BorderColor="Tan" BorderWidth="1px" CellPadding="2" ForeColor="Black"
  11.          GridLines="None">
  12.       <asp:TemplateField HeaderText="Detalle" ItemStyle-Width="70px" HeaderStyle-Width="70px">
  13.       <ItemTemplate>
  14.        <asp:LinkButton ID="Lnk_Redireccionar" Style="background-color: Transparent; margin-top: -3px;"
  15.         CommandName="Detalle" runat="server" CommandArgument='<%#Eval("rpe") %>'>
  16.         </asp:LinkButton>
  17.       </ItemTemplate>
  18.       <HeaderStyle Width="70px" />
  19.       <ItemStyle HorizontalAlign="Center" />
  20.      </asp:TemplateField>
  21.          <AlternatingRowStyle BackColor="PaleGoldenrod" />
  22.  
  23.          <Columns>
  24.              <asp:BoundField DataField="rpe"
  25.                  HeaderText="RPE del Empleado"
  26.                  InsertVisible="False" ReadOnly="True"

Y en el evento de mi SelectedIndex el if para el CommandName:

Código ASP:
Ver original
  1. Sub CustomersGridView_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs)
  2.  
  3.     Dim row As GridViewRow = CustomersGridView.SelectedRow
  4.  
  5.         Dim cadena As String = row.Cells(1).Text
  6.         Dim MyConnection As SqlConnection = New SqlConnection("server=myhost;database=mydb;User ID=myuser;Password=mypass;Trusted_Connection=no")
  7.         Dim MyCommand As SqlCommand = New SqlCommand("SELECT rpe as RPE_del_Empleado, convert(varchar,fe_inic,103) as Fecha_de_la_Incidencia, cl_incid AS Tipo_de_Incidencia FROM b_asiste WHERE (cl_incid='026' OR cl_incid='0670' OR cl_incid='050') AND rpe='" & cadena & "' GROUP BY rpe, cl_incid, fe_inic", MyConnection)
  8.         MyConnection.Open()
  9.  
  10.         Dim dr As SqlDataReader = MyCommand.ExecuteReader()
  11.         MyDataGrid.DataSource = dr
  12.         MyDataGrid.DataBind()
  13.         If (e.CommandName = "Detalle") Then
  14.             Response.Redirect("Default5.aspx?rpe=" + e.CommandArgument.ToString())
  15.         End If
  16.     End Sub

Pero me arroja el siguiente error:

'CommandName' no es un miembro de 'System.EventArgs'. :s
  #10 (permalink)  
Antiguo 11/11/2011, 16:36
Avatar de AWesker  
Fecha de Ingreso: octubre-2008
Mensajes: 177
Antigüedad: 16 años
Puntos: 27
Respuesta: Abrir nueva págna con un DataGrid

En efecto, para empezar, el TemplateField debe ir entre las viñetas <Columns></Columns>

Algo así
Código:
 
<asp:gridview id="CustomersGridView" 
       datasourceid="CustomersSource" 
       autogeneratecolumns="False"
       autogenerateselectbutton="True"
       allowpaging="True" 
       selectedindex="1"
       onselectedindexchanged="CustomersGridView_SelectedIndexChanged"
       onselectedindexchanging="CustomersGridView_SelectedIndexChanging"   
       runat="server" DataKeyNames="rpe" BackColor="LightGoldenrodYellow" 
         BorderColor="Tan" BorderWidth="1px" CellPadding="2" ForeColor="Black" 
         GridLines="None"> 
         <Columns>
 <asp:TemplateField HeaderText="Detalle" ItemStyle-Width="70px" HeaderStyle-Width="70px">
      <ItemTemplate>
       <asp:LinkButton ID="Lnk_Redireccionar" Style="background-color: Transparent; margin-top: -3px;"
        CommandName="Detalle" runat="server" CommandArgument='<%#Eval("rpe") %>'>
        </asp:LinkButton>
      </ItemTemplate>
      <HeaderStyle Width="70px" />
      <ItemStyle HorizontalAlign="Center" />
     </asp:TemplateField>
         <AlternatingRowStyle BackColor="PaleGoldenrod" />
             <asp:BoundField DataField="rpe" 
                 HeaderText="RPE del Empleado" 
                 InsertVisible="False" ReadOnly="True" ....
Como que fuera un BoundField.

Segundo, dependiendo de la forma en la que llenas el GridView (Usando un DataSource o a puro código) puedes o no utilizar el evento SelectedIndexChanged. En el ejemplo que te propuse anteriormente, utilizo el evento RowCommand. Si mal no recuerdo, el SelectedIndexChanged no tiene el e.CommandArgument.

Yo te recomiendo usar el evento RowCommand.

Pero si queres usar el SelectedIndexChanged debes decirme cuál es la forma en la que llenas el GrdiView (con DataSource o a puro código) y después tomamos las medidas necesarias.

Saludos...
  #11 (permalink)  
Antiguo 14/11/2011, 09:14
Avatar de stuart_david3  
Fecha de Ingreso: agosto-2011
Mensajes: 215
Antigüedad: 13 años, 2 meses
Puntos: 1
Respuesta: Abrir nueva págna con un DataGrid

Hola AWesker Pues entre se es usando DataSource o puro código me confundí, es decir si uso el DataSource, pero en sí todo lo hice a código, ya que no configure el origen de datos con el, solo lo agregue y en el código le metí los parámetros para que me concetará a la base de datos del servidor donde estoy trabajando:

Código ASP:
Ver original
  1. <asp:sqldatasource id="CustomersSource"
  2.         selectcommand="SELECT MAX(b_contra.fe_repro), MAX(c_zonas.nombre) AS nombrezona, MAX(c_puesto.puesto) AS puesto, MAX(c_a_resp.dscarea) AS area, b_traba1.rpe, MAX(b_traba1.nombre) AS nombre, convert(varchar,b_traba1.fe_antre,103) as fechaant, convert(varchar,b_traba1.fe_ingre,103) AS fechaingre, convert(varchar,b_traba3.fe_natra,103) AS fechanat, CONVERT (INT,(DATEDIFF (dd, b_traba3.fe_natra, GETDATE()) - DATEDIFF (yy, b_traba3.fe_natra, GETDATE()) / 4.25) / 365) AS Edad, MAX(b_traba1.sexotrab) AS sexo, MAX(c_ubica.ubicapza) AS ubicacion, MAX(b_traba1.cl_nides) AS nides, MAX(b_traba1.if_nire2) AS nire, convert(varchar,fe,103) AS fe, CASE WHEN fe<convert(varchar,GETDATE(),103) THEN convert(varchar,GETDATE(),103) ELSE null END AS fepos, CONVERT (INT,(DATEDIFF (dd, GETDATE(), fe) - DATEDIFF (yy, GETDATE(), fe) / 4.25) / 365) AS anyjub FROM (SELECT fe_antre, CASE WHEN b_traba1.sexotrab='M' THEN DATEADD(yy, 30, convert(varchar,b_traba1.fe_antre,103)) ELSE DATEADD(yy, 25, convert(varchar,b_traba1.fe_antre,103)) END AS fe FROM b_traba1) AS t1, b_traba1, b_traba3, c_zonas, c_a_resp, c_ubica, c_puesto, b_contra WHERE (DATEDIFF(yy, b_traba1.fe_antre, GETDATE()) > 25) AND (DATEDIFF(yy, b_traba3.fe_natra, GETDATE()) > 55) AND b_traba1.cl_sitla IS NULL AND c_zonas.descr=b_traba1.cl_zona AND c_a_resp.area=b_traba1.area AND b_traba1.rpe=b_traba3.rpe AND b_traba1.rpe=b_contra.rpe AND c_puesto.cl_puest=b_contra.cl_puest AND b_traba1.fe_antre=t1.fe_antre AND b_traba1.cl_ubica=c_ubica.cl_ubica GROUP BY b_traba1.rpe, b_traba1.fe_antre, b_traba1.fe_ingre, b_traba3.fe_natra, fe"
  3.         connectionstring="server=myhost;database=mydb;User ID=mypass;Password=myuser;Trusted_Connection=no"
  4.         runat="server"/>

Nuevamente gracias, y disculpa la tardanza ...
  #12 (permalink)  
Antiguo 14/11/2011, 10:20
Avatar de AWesker  
Fecha de Ingreso: octubre-2008
Mensajes: 177
Antigüedad: 16 años
Puntos: 27
Respuesta: Abrir nueva págna con un DataGrid

Entónces si utilizas un DataSource, cuando me refería a "puro código" quise decir si utilizabas un DataTable sin DataSet tipado y todo eso...

Entónces no hay ningún problema si usas el evento SelectedIndexChanged, ¿ya intentaste usar el RowCommand?

Algo así:
CustomersGridView_RowCommand(...
Código ASP:
Ver original
  1. if (e.CommandName == "Detalle")
  2. {
  3.    Response.Redirect("~/Procesos/PaginaDetalle.aspx?Id_Det=" +   e.CommandArgument.ToString());
  4.  
  5. }

Sin olvidar el TemplateField dentro de las viñetas <Columns></Columns>. Probalo y si no funciona usamos el SelectedIndexChanged.
  #13 (permalink)  
Antiguo 14/11/2011, 10:39
Avatar de stuart_david3  
Fecha de Ingreso: agosto-2011
Mensajes: 215
Antigüedad: 13 años, 2 meses
Puntos: 1
Respuesta: Abrir nueva págna con un DataGrid

Ah ok gracias, bueno deja lo intentó con el RowCommand y te digo qué pasa... =)...
  #14 (permalink)  
Antiguo 14/11/2011, 11:26
Avatar de stuart_david3  
Fecha de Ingreso: agosto-2011
Mensajes: 215
Antigüedad: 13 años, 2 meses
Puntos: 1
Respuesta: Abrir nueva págna con un DataGrid

Bueno, ya lo hice usando el RowCommand, y bueno tengo un pequeño conflicto al recibir la variable en el Response.QueryString, lo puse de esta manera:

Request.QueryString["rpe"].ToString() y me genera este error:
Debe asignarse un acceso de propiedad a la propiedad o utilizar su valor.

Lo puse agregandosela a una variable:
Dim cadena = Request.QueryString["rpe"].ToString()
Pero me arroja otro error:
Se esperaba un identificador.

Pensé que esta estaba bien ya que en la query de mi segunda pagina quiero hacerle referencia al trabajador que seleccione y lo hago haciéndole referencia en la misma consulta a la variable consulta:

... AND rpe='" & cadena & "' ...

El código de mis 2 páginas es el siguiente:

Calando3
Código ASP:
Ver original
  1. <%@ Page language="VB" %>
  2. <%@ Import Namespace="System.Data" %>
  3. <%@ Import Namespace="System.Data.SqlClient" %>
  4. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  5.     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  6.  
  7. <script runat="server">
  8.  
  9.     Sub GridViewCommandEventHandler(ByVal sender As Object, ByVal e As GridViewCommandEventArgs)
  10.  
  11.         If (e.CommandName = "Detalle") Then
  12.             Response.Redirect("Calando4.aspx?rpe=" + e.CommandArgument.ToString())
  13.         End If
  14.     End Sub
  15.  
  16. </script>
  17.  
  18. <html xmlns="http://www.w3.org/1999/xhtml" >
  19.   <head id="Head1" runat="server">
  20.     <title>GridView Select Example</title>
  21. </head>
  22. <body>
  23.     <form id="form1" runat="server">
  24.  
  25.      <h3>Trabajadores jubilables mayores de 55 años con más de 25 años trabajando</h3>
  26.  
  27.      <asp:gridview id="CustomersGridView"
  28.        datasourceid="CustomersSource"
  29.        autogeneratecolumns="False"
  30.        autogenerateselectbutton="True"
  31.        allowpaging="True"
  32.        OnRowCommand="GridViewCommandEventHandler"  
  33.        runat="server" DataKeyNames="rpe" BackColor="LightGoldenrodYellow"
  34.          BorderColor="Tan" BorderWidth="1px" CellPadding="2" ForeColor="Black"
  35.          GridLines="None">
  36.      
  37.          <AlternatingRowStyle BackColor="PaleGoldenrod" />
  38.  
  39.          <Columns>
  40.          <asp:TemplateField HeaderText="Detalle" ItemStyle-Width="70px" HeaderStyle-Width="70px">
  41.       <ItemTemplate>
  42.        <asp:LinkButton ID="Lnk_Redireccionar" Text="Incidencias" Style="background-color: Transparent; margin-top: -3px;"
  43.         CommandName="Detalle" runat="server" CommandArgument='<%#Eval("rpe") %>'>
  44.         </asp:LinkButton>
  45.       </ItemTemplate>
  46.       <HeaderStyle Width="70px" />
  47.       <ItemStyle HorizontalAlign="Center" />
  48.      </asp:TemplateField>
  49.              <asp:BoundField DataField="rpe"
  50.                  HeaderText="RPE del Empleado"
  51.                  InsertVisible="False" ReadOnly="True"
  52.                  SortExpression="b_contra.fe_repro" />
  53.              <asp:BoundField DataField="nombre"
  54.                  HeaderText="Nombre del Empleado"
  55.                  SortExpression="c_zonas.nombre" />
  56.                  <asp:BoundField DataField="fechanat"
  57.                  HeaderText="Fecha de Nacimiento"
  58.                  SortExpression="fe_inic" />
  59.                  <asp:BoundField DataField="fechaant"
  60.                  HeaderText="Fecha de Antigüedad Reconocida"
  61.                  SortExpression="fe_inic" />
  62.                  <asp:BoundField DataField="fe"
  63.                  HeaderText="Fecha Probable de Jubilación"
  64.                  SortExpression="fe_inic" />
  65.                  <asp:BoundField DataField="anyjub"
  66.                  HeaderText="Años Transcurridos Desde la jubilación"
  67.                  SortExpression="fe_inic" />
  68.                  <asp:BoundField DataField="fepos"
  69.                  HeaderText="Fecha Probable Para Jubilación"
  70.                  SortExpression="fe_inic" />
  71.          </Columns>
  72.  
  73.          <FooterStyle BackColor="Tan" />
  74.          <HeaderStyle BackColor="Tan" Font-Bold="True" />
  75.          <PagerStyle BackColor="PaleGoldenrod" ForeColor="DarkSlateBlue"
  76.              HorizontalAlign="Center" />
  77.  
  78.        <selectedrowstyle backcolor="DarkSlateBlue"
  79.          forecolor="GhostWhite"/>  
  80.  
  81.          <SortedAscendingCellStyle BackColor="#FAFAE7" />
  82.          <SortedAscendingHeaderStyle BackColor="#DAC09E" />
  83.          <SortedDescendingCellStyle BackColor="#E1DB9C" />
  84.          <SortedDescendingHeaderStyle BackColor="#C2A47B" />
  85.  
  86.      </asp:gridview>
  87.  
  88.       <br/>
  89.          <asp:label id="Label1"
  90.         forecolor="Red"
  91.         runat="server"/>
  92.  
  93.       <asp:sqldatasource id="CustomersSource"
  94.         selectcommand="SELECT MAX(b_contra.fe_repro), MAX(c_zonas.nombre) AS nombrezona, MAX(c_puesto.puesto) AS puesto, MAX(c_a_resp.dscarea) AS area, b_traba1.rpe, MAX(b_traba1.nombre) AS nombre, convert(varchar,b_traba1.fe_antre,103) as fechaant, convert(varchar,b_traba1.fe_ingre,103) AS fechaingre, convert(varchar,b_traba3.fe_natra,103) AS fechanat, CONVERT (INT,(DATEDIFF (dd, b_traba3.fe_natra, GETDATE()) - DATEDIFF (yy, b_traba3.fe_natra, GETDATE()) / 4.25) / 365) AS Edad, MAX(b_traba1.sexotrab) AS sexo, MAX(c_ubica.ubicapza) AS ubicacion, MAX(b_traba1.cl_nides) AS nides, MAX(b_traba1.if_nire2) AS nire, convert(varchar,fe,103) AS fe, CASE WHEN fe<convert(varchar,GETDATE(),103) THEN convert(varchar,GETDATE(),103) ELSE null END AS fepos, CONVERT (INT,(DATEDIFF (dd, GETDATE(), fe) - DATEDIFF (yy, GETDATE(), fe) / 4.25) / 365) AS anyjub FROM (SELECT fe_antre, CASE WHEN b_traba1.sexotrab='M' THEN DATEADD(yy, 30, convert(varchar,b_traba1.fe_antre,103)) ELSE DATEADD(yy, 25, convert(varchar,b_traba1.fe_antre,103)) END AS fe FROM b_traba1) AS t1, b_traba1, b_traba3, c_zonas, c_a_resp, c_ubica, c_puesto, b_contra WHERE (DATEDIFF(yy, b_traba1.fe_antre, GETDATE()) > 25) AND (DATEDIFF(yy, b_traba3.fe_natra, GETDATE()) > 55) AND b_traba1.cl_sitla IS NULL AND c_zonas.descr=b_traba1.cl_zona AND c_a_resp.area=b_traba1.area AND b_traba1.rpe=b_traba3.rpe AND b_traba1.rpe=b_contra.rpe AND c_puesto.cl_puest=b_contra.cl_puest AND b_traba1.fe_antre=t1.fe_antre AND b_traba1.cl_ubica=c_ubica.cl_ubica GROUP BY b_traba1.rpe, b_traba1.fe_antre, b_traba1.fe_ingre, b_traba3.fe_natra, fe"
  95.         connectionstring="server=myhost;database=mydb;User ID=myuser;Password=mypass;Trusted_Connection=no"
  96.         runat="server"/>
  97.     <ASP:DataGrid id="MyDataGrid" runat="server"
  98.     Width="700px"
  99.     BackColor="LightGoldenrodYellow"
  100.     BorderColor="Tan"
  101.     CellPadding=2
  102.     Font-Name="Verdana"
  103.     Font-Size="8pt"
  104.     HeaderStyle-BackColor="#aaaadd"
  105.     EnableViewState="False" BorderWidth="1px" Font-Names="Verdana"
  106.          ForeColor="Black" GridLines="None"
  107.   >
  108.         <AlternatingItemStyle BackColor="PaleGoldenrod" />
  109.         <FooterStyle BackColor="Tan" />
  110. <HeaderStyle BackColor="Tan" Font-Bold="True"></HeaderStyle>
  111.         <PagerStyle BackColor="PaleGoldenrod" ForeColor="DarkSlateBlue"
  112.             HorizontalAlign="Center" />
  113.         <SelectedItemStyle BackColor="DarkSlateBlue" ForeColor="GhostWhite" />
  114.      </asp:DataGrid>
  115.     </form>
  116.    
  117.   </body>
  118. </html>

Calando4
Código ASP:
Ver original
  1. <%@ Page language="VB" %>
  2. <%@ Import Namespace="System.Data" %>
  3. <%@ Import Namespace="System.Data.SqlClient" %>
  4. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  5.     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  6.  
  7. <script runat="server">
  8.  
  9.     Sub Page_Load(ByVal Sender As Object, ByVal E As EventArgs)
  10.         Dim cadena = Request.QueryString["rpe"].ToString()
  11.         Dim MyConnection As SqlConnection = New SqlConnection("server=myhost;database=mydb;User ID=myuser;Password=mypass;Trusted_Connection=no")
  12.         Dim MyCommand As SqlCommand = New SqlCommand("SELECT rpe as RPE_del_Empleado, convert(varchar,fe_inic,103) as Fecha_de_la_Incidencia, cl_incid AS Tipo_de_Incidencia FROM b_asiste WHERE (cl_incid='026' OR cl_incid='0670' OR cl_incid='050') AND rpe='" & cadena & "' GROUP BY rpe, cl_incid, fe_inic", MyConnection)
  13.         MyConnection.Open()
  14.  
  15.         Dim dr As SqlDataReader = MyCommand.ExecuteReader()
  16.         MyDataGrid.DataSource = dr
  17.         MyDataGrid.DataBind()
  18.        
  19.     End Sub
  20.  
  21. </script>
  22.  
  23. <html xmlns="http://www.w3.org/1999/xhtml" >
  24.   <head id="Head1" runat="server">
  25.     <title>GridView Select Example</title>
  26. </head>
  27. <body>
  28.     <form id="form1" runat="server">
  29.  
  30.      <h3>Incidencias de los Trabajadores Jubilables</h3>
  31.  
  32.       <br/>
  33.     <ASP:DataGrid id="MyDataGrid" runat="server"
  34.     Width="700px"
  35.     BackColor="LightGoldenrodYellow"
  36.     BorderColor="Tan"
  37.     CellPadding=2
  38.     Font-Name="Verdana"
  39.     Font-Size="8pt"
  40.     HeaderStyle-BackColor="#aaaadd"
  41.     EnableViewState="False" BorderWidth="1px" Font-Names="Verdana"
  42.          ForeColor="Black" GridLines="None"
  43.   >
  44.         <AlternatingItemStyle BackColor="PaleGoldenrod" />
  45.         <FooterStyle BackColor="Tan" />
  46. <HeaderStyle BackColor="Tan" Font-Bold="True"></HeaderStyle>
  47.         <PagerStyle BackColor="PaleGoldenrod" ForeColor="DarkSlateBlue"
  48.             HorizontalAlign="Center" />
  49.         <SelectedItemStyle BackColor="DarkSlateBlue" ForeColor="GhostWhite" />
  50.      </asp:DataGrid>
  51.     </form>
  52.    
  53.   </body>
  54. </html>
  #15 (permalink)  
Antiguo 14/11/2011, 11:51
Avatar de stuart_david3  
Fecha de Ingreso: agosto-2011
Mensajes: 215
Antigüedad: 13 años, 2 meses
Puntos: 1
Respuesta: Abrir nueva págna con un DataGrid

Ala beisboooooooooooooooooooooooooooooool!!! Ya quedo gracias a Dios. Era un pequeño errorcillo, al usar corchetes, como estoy en asp con vb tenía que usar paréntesis, esta es la parte que tuve que modificar en mi RequestQueryString:

Dim cadena = Request.QueryString("rpe")

Muchiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiis imas gracias AWesker abusando de tu amabilidad, hay algunos casos en los que yo mando a la otra página pero el empleado que selecciono no tiene incidencias, es decir, no se me debe generar nada en la tabla, como puedo hacer para mandar un mensaje de "No existen incidencias para este empleado" si mi resultado es nulo. Pensé en algo como esto y lo puse pero no me funcionó ya que el Isnull no me lo reconoce como función ni nada ...

If dr = IsNull Then
Label1.Text = "No existen incidencias para este empleado"
End If
  #16 (permalink)  
Antiguo 14/11/2011, 12:10
Avatar de stuart_david3  
Fecha de Ingreso: agosto-2011
Mensajes: 215
Antigüedad: 13 años, 2 meses
Puntos: 1
Respuesta: Abrir nueva págna con un DataGrid

Bueno cualquier cosa por si a alguien le sirve esto, también gracias a Dios encontré la forma en cómo hacerlo:

Código ASP:
Ver original
  1. Dim dr As SqlDataReader = MyCommand.ExecuteReader()
  2.        
  3.         If dr.Read() = True Then
  4.             MyDataGrid.DataSource = dr
  5.             MyDataGrid.DataBind()
  6.         Else
  7.             Label1.Text = "No existen incidencias para este empleado"
  8.         End If

Ah! Y muchas gracias por toda tu ayuda AWesker

Etiquetas: sql, tablas, vs2010, aspx
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:07.