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> "
				 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í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">$  <%# 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!. 
  
 
