Foros del Web » Programación para mayores de 30 ;) » .NET »

Alguien puede probar este código?

Estas en el tema de Alguien puede probar este código? en el foro de .NET en Foros del Web. Hola, es una paginación que hice y me gustaría que la prueben si alguien tiene un poco de tiempo para que me de su opinión ...
  #1 (permalink)  
Antiguo 15/06/2005, 19:09
 
Fecha de Ingreso: marzo-2005
Mensajes: 1.418
Antigüedad: 19 años, 10 meses
Puntos: 9
Alguien puede probar este código?

Hola, es una paginación que hice y me gustaría que la prueben si alguien tiene un poco de tiempo para que me de su opinión al respecto. Le encontré hasta ahora unos cuantos errores. Cuando se muestra un número inferior de registros al que debe contener cada página; y supuestamente en el código lo que trato de hacer es que la primera vez que el usuario entré a la página se cree la estructura del datatable, pero dije supuestamente porque no funciona así, sino que cada vez que carga la página se crea un nuevo Datatable, por más que le haya puesto If not isPostBack. Lo demás funciona correctamente según lo he probado.
Acá está el código, no les pido que lo analicen profundamente, pero si pueden darle al menos una leida rápidamente para ver más o menos como funciona y me den sus comentarios, estaría muy agradecido, ya que estoy incursionando en esto de la programación, y sobre todo en Asp.Net.
Acá está el código:

<%@ Import Namespace="System.Data"%>
<%@ Import Namespace="System.Data.OleDb"%>
<script runat="server">
Sub Page_Load(A As Object, E As EventArgs)
Dim strConn As string
Dim pag_Table As DataTable 'Esta es la tabla que se muestra al usuario
Dim Row As DataRow
Dim newRow As DataRow
Dim i As Byte
Dim b As Byte
Dim totalPages As Byte
Dim totalRecords As Byte
Dim RecordsPerPage As Byte = 6
Dim actualPage As Byte = Request.QueryString("page")
Dim StartAt As Byte = (actualPage - 1) * RecordsPerPage
Dim Y As Byte = StartAt
Dim var As Byte = StartAt
Dim Pages As String
Dim DS As New DataSet()

If Not isPostBack then
strConn = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=C:\Inetpub\wwwroot\SiteData.mdb;"
Dim oConn As New OleDbConnection(strConn)

Dim ap As New OleDbDataAdapter("SELECT Id, Nombre, Imagen, Precio FROM Productos WHERE IdNegocio = 2", oConn )
ap.Fill(DS,"Products")
totalRecords = DS.Tables("Products").Rows.Count
totalPages = totalRecords/RecordsPerPage

if totalRecords Mod RecordsPerPage > 0 then
totalPages += 1
end if

pag_Table = New DataTable("PagingTable")
pag_Table.Columns.Add("Id", GetType(Integer))
pag_Table.Columns.Add("Nombre", GetType(String))
pag_Table.Columns.Add("Imagen", GetType(String))
pag_Table.Columns.Add("Precio", GetType(Decimal))

For i=0 to RecordsPerPage - 1
newRow = pag_Table.NewRow
newRow("Id") = 0
newRow("Nombre") = ""
newRow("Imagen") = ""
newRow("Precio") = 0
pag_Table.Rows.Add(newRow)
Next
End If

For B=0 to RecordsPerPage - 1
Row = pag_Table.Rows(B)
Row("Id") = DS.Tables("Products").Rows(Y).Item(0)
Row("Nombre") = DS.Tables("Products").Rows(Y).Item(1)
Row("Imagen") = DS.Tables("Products").Rows(Y).Item(2)
Row("Precio") = DS.Tables("Products").Rows(Y).Item(3)
For Y=var to var
Next
var +=1
If Y > TotalRecords - 1 then
Exit for
end if
Next

For i=1 to totalPages
Pages = Pages & "<a href=paging.aspx?page=" & i & ">" & i & "</a>&nbsp;"
Next

lnk_Next.text = "<a href=paging.aspx?page=" & actualPage + 1 & ">Siguiente</a>"
lnk_Previous.text = "<a href=paging.aspx?page=" & actualPage - 1 & ">Anterior</a>"
lnk_Pages.text = Pages

if ActualPage > 1 then
lnk_Previous.Visible = true
End if
if ActualPage < TotalPages
lnk_Next.Visible = true
End if

DataList1.DataSource = pag_Table.DefaultView
DataList1.DataBind()


End sub
</script>
<html>
<head>
<style type="text/css">
A.producto:visited {font-family:Verdana, Arial, Helvetica, Sans-serif;font-weight:light;color:#0066CC;font-size:10px;text-decoration:nunderline}
A.producto:hover {font-family:Verdana, Arial, Helvetica, Sans-serif;font-weight:light;color:darkorange;font-size:10px;text-decoration:underline}
A.producto:link {font-family:Verdana, ARial, Helvetica, Sans-serif;font-weight:light;color:#0066CC;font-size:10px;text-decoration:underline}
A.producto:active {font-family:Verdana, Arial, Helvetica, Sans-serif;font-weight:light;color:#0066CC;font-size:10px;text-decoration:underline}
.celda_descripcion {color:balck;font-family:Arial, Helvetica, Sans-serif;font-size:10px;font-weight:light;padding-top:4px}
.celda_imagen {padding-bottom:14px}
</style>
<title>Documento sin t&iacute;tulo</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body>
<form runat="server">
<asp:datalist Id="Datalist1" runat="server" RepeatColumns="3" CellPadding="0" CellSpacing="0" HorizontalAlign="Center">
<itemTemplate>
<table width="200">
<tr><td align="center" width="200" height="85"><img src='<%# Container.DataItem("Imagen")%>' height="80" width="80"></td></tr>
<tr><td align="center" height="20"><a href="Details.aspx?id=<%# Container.DataItem("Id")%>" class="producto"><%# Container.DataItem("Nombre")%></a></td></tr>
<tr><td align="center" height="20" class="celda_descripcion">$&nbsp;&nbsp;<%# Container.DataItem("Precio")%></td></tr>
<tr><td align="center" height="25"><a href="Add.aspx?id=<%# Container.DataItem("Id")%>&Qty=1"><img src="Imágenes/comprar_button.jpg" border="0"></a></td></tr>
</table><br><br>
</itemTemplate>
</asp:datalist>
<asp:Label id="lnk_Previous" runat="server" visible="false"/>
<asp:Label id="lnk_Pages" runat="server"/>
<asp:Label id="lnk_Next" runat="server" visible="false"/>
</form>
</body>
</html>

Un saludo grande.

---------------------Luego de la edicion --------------------------
Me di cuenta de porque no funcionaba lo del PostBack, era que en realidad nunca esta haciendo un postback, sino recargando la página. De todas formas, probé haciendo postback y lo mismo me da error. Hay algo que no entiendo. Supuestamente si yo dentro de If Not isPostBack then... me conecto a la base de datos, y cargo un dataset, no se puede seguir usando este DataSet fuera del postback?, porque el error que me sale es el siguiente:

Referencia a objeto no establecida como instancia de un objeto.

Eso me sale en las lineas que trato de rellenar el datatable que verá el usuario con el datatable que tengo en el DS.
Alguien me podría orientar en esto?
Un saludo, y olvidense del código entonces, porque lo que quería hacer hasta que no arregle ese tema no es mi objetivo. Mi objetivo es que se conecte una sola ves a la base de datos, se llene una sola ves un único dataset, se cree una sola vez una única tabla, y la única que se actualiza para mostrar los diferentes resultados al usuario sería esta última tabla.
Ahora ya entré en dudas si se podrá hacer eso.
Un saludo!.
Suerte!.

Última edición por mariano_donati; 15/06/2005 a las 22:59
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 16:19.