slideshow with paging in datalist
ok guys here is what i got. i got a big image on top to display small thumbnail at the bottom. and these small thumbnail are displayed in datalist. everytime u click on an item it changes the big image to the one u just click on. i got that to work but as soon as i want to do the paging on the datalist, it will work for the first four but then it keeps reseting my id on the thumbnail so i never get passed the first four. and it always reload the page. here is my code maybe u guys can help me with it. if you create new website and copy this in it will work. u just need to have some images in a folder call images inside ur webproject. anycode that i commented out in the default.aspx.vb is because i was trying to do the paging. please help. thank you
default.aspx
Code:
<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Default.aspx.vb" Inherits="_Default" EnableEventValidation="false" %>
<%@ Register Assembly="System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
Namespace="System.Web.UI" TagPrefix="asp" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<HTML>
<HEAD>
<STYLE TYPE="text/css">
body { font-family:Verdana;font-size: medium;}
.ImageTitle { font-weight:bold; font-size:large;}
.index {font-size: small;}
.NavLink { background-color: yellow; font-weight: bold; }
</STYLE>
</HEAD>
<BODY>
<form runat="server">
<asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager>
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<asp:Label runat="server" id="currentImgTitle" CssClass="ImageTitle" /><br />
<asp:Image runat="server" id="currentImg" />
<asp:Button ID="cmdPrev" runat="server" Text="Previous" />
<asp:Button ID="cmdNext" runat="server" Text="Next" />
<asp:Button ID="cmdPrev2" runat="server" Text="Previous" />
<p>
<asp:DataList runat="server" id="dlIndex" OnItemDataBound="dlIndex_ItemDataBound" RepeatColumns="4" CssClass="index">
<ItemTemplate>
<asp:ImageButton runat="server" id="lnkPic" width="50" Height="50" PostBackUrl="Default.aspx?N=5" />
</ItemTemplate>
</asp:DataList>
<asp:Button ID="cmdNext2" runat="server" Text="Next" />
</ContentTemplate>
</asp:UpdatePanel>
</form>
</BODY>
</HTML>
default.aspx.vb
Code:
Imports System.IO
Partial Class _Default
Inherits System.Web.UI.Page
Public PageNumber As Integer
Function FilterForImages(ByVal images() As FileInfo) As FileInfo()
Dim newImages As New ArrayList(images.Length)
Dim i As Integer
For i = 0 To images.Length - 1
If Path.GetExtension(images(i).Name.ToLower()) = ".jpg" OrElse _
Path.GetExtension(images(i).Name.ToLower()) = ".jpeg" OrElse _
Path.GetExtension(images(i).Name.ToLower()) = ".png" OrElse _
Path.GetExtension(images(i).Name.ToLower()) = ".gif" Then
newImages.Add(images(i))
End If
Next
Return CType(newImages.ToArray(GetType(FileInfo)), FileInfo())
End Function
Private Sub LoadDataList()
Dim dirInfo As New DirectoryInfo("C:\SlideShow\images")
Dim images() As FileInfo = FilterForImages(dirInfo.GetFiles())
Dim imgIndex As Integer = 0
If Not Request.QueryString("N") Is Nothing AndAlso IsNumeric(Request.QueryString("N")) Then
imgIndex = CInt(Request.QueryString("N"))
End If
currentImgTitle.Text = "You are Viewing: " & _
Path.GetFileNameWithoutExtension(images(imgIndex).Name) & _
" (" & imgIndex + 1 & " of " & images.Length & ")"
currentImg.ImageUrl = "~/images/" & images(imgIndex).Name
If imgIndex > 0 Then
cmdPrev.PostBackUrl = "Default.aspx?N=" & imgIndex - 1
End If
If imgIndex < images.Length - 1 Then
cmdNext.PostBackUrl = "Default.aspx?N=" & imgIndex + 1
End If
dlIndex.DataSource = images
dlIndex.DataBind()
'Dim objPds As New PagedDataSource
'objPds.DataSource = images
'objPds.AllowPaging = True
'objPds.PageSize = 4
'PageNumber = currentpage()
'objPds.CurrentPageIndex = PageNumber
'dlIndex.DataSource = objPds
'dlIndex.DataBind()
End Sub
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
'If Not Page.IsPostBack Then
'ViewState("Start") = 0
LoadDataList()
'End If
End Sub
'Public Function currentpage() As Integer
' Dim obj As New Object
' obj = Me.ViewState("_CurrentPage")
' If obj Is DBNull.Value Then
' Return 0
' Else
' Return obj
' End If
'End Function
'Protected Sub cmdPrev2_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles cmdPrev.Click
' 'PageNumber -= 1
' ViewState("_CurrentPage") = CInt(ViewState("_CurrentPage")) - 1
' LoadDataList()
'End Sub
'Protected Sub cmdNext2_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles cmdNext.Click
' 'PageNumber += 1
' ViewState("_CurrentPage") = CInt(ViewState("_CurrentPage")) + 1
' LoadDataList()
'End Sub
Protected Sub dlIndex_ItemDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DataListItemEventArgs) Handles dlIndex.ItemDataBound
If e.Item.ItemType = ListItemType.Item OrElse e.Item.ItemType = ListItemType.AlternatingItem Then
Dim h1 As ImageButton = CType(e.Item.FindControl("lnkPic"), ImageButton)
h1.ImageUrl = "~/images/" & DataBinder.Eval(e.Item.DataItem, "Name".ToString)
h1.PostBackUrl = "Default.aspx?N=" & e.Item.ItemIndex
End If
End Sub
End Class