Det er kort fortalt et billedgalleri som bliver generet vha. min servers fil system (der er altså ingen database)Navigationen mellem de forskellige billed katagorier består af en dropdownlist og det virker fint.
Men....
For at man skal kunne følge med i hvornår der er kommet nye billeder har jeg lavet en funktion der viser en mere detaljeret oversigt over hvilke billeder der er til rådighed på sitet.
Når man klikker på knappen "Vis oversigt" har jeg programmeret det så man får en oversigt over alle billedserier i en DataView. Det fungerer som det skal, men problemet er at man skal kunne navigerer til de forskellige billedkatagorier ved at klikke på billedseriens navn.
For det skal kunne lade sig gøre skal man på en eller anden måde ændre og sende værdierne i dropdownlisten så de tilsvarer de værdier fra linket.
Det er lykkedes mig at ændre værdierne vha. "SelectedIndex", men da dette sker server side via en sub funktion bliver de nye værdier i dropdownlisten ikke sendt.
Jeg har ledt og ledt i alle afkroge af nettet for at finde andre eksempler på hvordan dette er gjort, men uden held.
Kan det lade sig gøre ? er der nogen der kan hjælpe ?
hmm det er en lidt omstændig process og sikkert ikke helt den "rigtigt måde" at gøre det på, men jeg er 100% selvlært i asp.net så bær over med min lidt rodede kode.
Dette er min IndexChanged procedure
Sub Index_Changed(sender As Object, e As EventArgs) '::::::::::::::::Hvis ny folder er valgt, så skal navigations menuen nulstilles
Label1.Text = "You selected" NextPrev.Text ="Test" NavigationsHelp.Text = "<br>Viser nu ovenstående af Emmas billedserier. Klik på de små billeder for at forstørre dem." BindData() End Sub
det får du dog nok ikke meget ud af, da den jo hænger meget sammen med andre dele af koden. Jeg er lidt ked af at poste hele koden (jeg har brugt lang tid på at lave den osv.) Forstår du ellers hvad det er jeg prøver at lave og hvad mit problem er ?
Public Sub SelectFolderFromOverview(Src As Object, Args As CommandEventArgs) Dim SelectedFolder as String = Args.CommandArgument ShowFolders.SelectedIndex = ShowFolders.Items.IndexOf(ShowFolders.Items.FindByValue(SelectedFolder)) End Sub
Jeg forstår godt, hvad det er du prøver at lave. Men jeg kan ikke se hvad problemet er !
Et skud i tågen. Prøv at kalde BindData() fra SelectFolderFromOverview:
Public Sub SelectFolderFromOverview(Src As Object, Args As CommandEventArgs) Dim SelectedFolder as String = Args.CommandArgument ShowFolders.SelectedIndex = ShowFolders.Items.IndexOf(ShowFolders.Items.FindByValue(SelectedFolder)) BindData() End Sub
NavigationsHelp.Text = "<span class='normtekst'><br><br>Hejsa, det er så her jeg viser lidt billeder af mig og min famile.<br>For at gøre det lidt lettere at finde de billeder du gerne vil se, har jeg fået min far til, at opdele de billeder ham og mor har taget af mig, i nogle fotoserier.<br>Du kan vælge hvilken serie du gerne vil se billeder fra ved at bruge menuen ovenfor.<br>Rigtig god fornøjelse<br><br><b>Kærlig hilsen Emma</b></span>" PrevItem.visible = false NextItem.visible = false OverViewList.visible=false ShowOverviewButton.visible=true end if
If not Request("ShowFolders")="" and not Request("ShowFolders")="Vælg en af Emmas Fotoserier" Then OverViewList.visible=false ShowOverviewButton.visible=false PrevItem.visible = true NextItem.visible = true
'::::::::::::::Lav et Dataset som indeholder fil navne
Dim storefile As directory Dim directory As String Dim files As String() Dim File As String
Dim myDataSet as New DataSet() myDataSet.Tables.Add(New DataTable("filinfo")) myDataSet.Tables("filinfo").Columns.Add("Filnavn") myDataSet.Tables("filinfo").Columns.Add("Filtype")
For Each File In files Dim filnavn as string = System.IO.Path.GetFileName(File) Dim row As DataRow = myDataSet.Tables("filinfo").NewRow If Left(filnavn, 2) = "T_" then row(0) = filnavn myDataSet.Tables("filinfo").Rows.Add(row) end if Next
':::::::::::::::::Lav et nyt dataset med paging
Dim Sidenummer As String
If NextPrev.Text = "Test" then Sidenummer = Request("Pagenumbers") else Sidenummer = NextPrev.Text end if
Dim intVisPerSide As Integer = 10
Dim intMaxRecords As Integer Dim intRecordCount as String = CStr(myDataSet.Tables(0).Rows.Count) Dim intPageCount As Integer = Math.Ceiling(intRecordCount / intVisPerSide) Dim intLastPageItemCount As Integer = (intRecordCount Mod intVisPerSide) Dim intPageNumber As Integer Dim intStartRow As Integer
Dim PagedDataSet as New DataSet() PagedDataSet.Tables.Add(New DataTable("filinfo")) PagedDataSet.Tables("filinfo").Columns.Add("Filnavn") PagedDataSet.Tables("filinfo").Columns.Add("Filtype")
Dim NewDataTable As DataTable = PagedDataSet.Tables("filinfo") Dim OldDataTable As DataTable = myDataSet.Tables("filinfo")
Dim y As Integer Dim x As Integer
If Request("Pagenumbers") = "" Or Request("Pagenumbers") = "1" And NextPrev.Text = "Test" Or Label1.Text = "You selected" Then intPageNumber = 1 intStartRow = 0 Else intPageNumber = CType(Sidenummer , Integer) intStartRow = ((intPageNumber - 1) * intVisPerSide) End if
If intPageCount <> intPageNumber then intMaxRecords = intVisPerSide - 1 Else intMaxRecords =intLastPageItemCount -1 End if
For x = intStartRow To (intStartRow + intMaxRecords) NewDataTable.ImportRow(OldDataTable.Rows(x)) Next
'::::::::::::::::Lav en oversigt over hvor mange sider der er
If Label1.Text = "You selected" then Dim ListPagenumbers As New ArrayList For x = 1 to intPageCount ListPagenumbers.Add(x) Next ListPagenumbers.TrimToSize() Pagenumbers.DataSource = ListPagenumbers Pagenumbers.DataBind
Pagenumbers.SelectedIndex = 0 end if
End If
':::::::::::::Lav en liste over billed foldere If Request("ShowFolders")="" Then dim Dir as string dim Subdirs() as string Subdirs = Directory.GetDirectories("C:\mywebsite\emma\billeder\") Dim FolderList As New ArrayList FolderList.Add ("Vælg en af Emmas Fotoserier") For Each Dir in Subdirs Dim foldernavn as string = System.IO.Path.GetFileName(Dir) FolderList.Add (foldernavn) Next FolderList.TrimToSize() ShowFolders.DataSource = FolderList ShowFolders.DataBind end if
Umiddelbart kan jeg ikke se noget galt med ovenstående kode. Har du prøvet det her:
Public Sub SelectFolderFromOverview(Src As Object, Args As CommandEventArgs) Dim SelectedFolder as String = Args.CommandArgument ShowFolders.SelectedIndex = ShowFolders.Items.IndexOf(ShowFolders.Items.FindByValue(SelectedFolder)) BindData() End Sub
jep, det er koden som den virker nu på siden, jeg tror problemet er at den if statement der er under bindata siger at koden kun skal eksekverers hvis Request("ShowFolders") (som er dropdownlisten) IKKE = "", hvilket den åbenbart bliver når man bruger SelectedIndex til at vælge et nyt item i dropdownlisten
NavigationsHelp.Text = "<span class='normtekst'><br><br>Hejsa, det er så her jeg viser lidt billeder af mig og min famile.<br>For at gøre det lidt lettere at finde de billeder du gerne vil se, har jeg fået min far til, at opdele de billeder ham og mor har taget af mig, i nogle fotoserier.<br>Du kan vælge hvilken serie du gerne vil se billeder fra ved at bruge menuen ovenfor.<br>Rigtig god fornøjelse<br><br><b>Kærlig hilsen Emma</b></span>" PrevItem.visible = False NextItem.visible = False OverViewList.visible = False ShowOverviewButton.visible = True End If
If Not RequestedFolder = "" And Not RequestedFolder = "Vælg en af Emmas Fotoserier" Then OverViewList.visible = False ShowOverviewButton.visible = False PrevItem.visible = True NextItem.visible = True
'::::::::::::::Lav et Dataset som indeholder fil navne
Dim storefile As directory Dim directory As String Dim files As String() Dim File As String
Dim myDataSet As New DataSet() myDataSet.Tables.Add(New DataTable("filinfo")) myDataSet.Tables("filinfo").Columns.Add("Filnavn") myDataSet.Tables("filinfo").Columns.Add("Filtype")
For Each File In files Dim filnavn As String = System.IO.Path.GetFileName(File) Dim row As DataRow = myDataSet.Tables("filinfo").NewRow If Left(filnavn, 2) = "T_" Then row(0) = filnavn myDataSet.Tables("filinfo").Rows.Add(row) End If Next
':::::::::::::::::Lav et nyt dataset med paging
Dim Sidenummer As String
If NextPrev.Text = "Test" Then Sidenummer = Request("Pagenumbers") Else Sidenummer = NextPrev.Text End If
Dim intVisPerSide As Integer = 10
Dim intMaxRecords As Integer Dim intRecordCount As String = CStr(myDataSet.Tables(0).Rows.Count) Dim intPageCount As Integer = Math.Ceiling(intRecordCount / intVisPerSide) Dim intLastPageItemCount As Integer = (intRecordCount Mod intVisPerSide) Dim intPageNumber As Integer Dim intStartRow As Integer
Dim PagedDataSet As New DataSet() PagedDataSet.Tables.Add(New DataTable("filinfo")) PagedDataSet.Tables("filinfo").Columns.Add("Filnavn") PagedDataSet.Tables("filinfo").Columns.Add("Filtype")
Dim NewDataTable As DataTable = PagedDataSet.Tables("filinfo") Dim OldDataTable As DataTable = myDataSet.Tables("filinfo")
Dim y As Integer Dim x As Integer
If Request("Pagenumbers") = "" Or Request("Pagenumbers") = "1" And NextPrev.Text = "Test" Or Label1.Text = "You selected" Then intPageNumber = 1 intStartRow = 0 Else intPageNumber = CType(Sidenummer, Integer) intStartRow = ((intPageNumber - 1) * intVisPerSide) End If
If intPageCount <> intPageNumber Then intMaxRecords = intVisPerSide - 1 Else intMaxRecords = intLastPageItemCount - 1 End If
For x = intStartRow To (intStartRow + intMaxRecords) NewDataTable.ImportRow(OldDataTable.Rows(x)) Next
'::::::::::::::::Lav en oversigt over hvor mange sider der er
If Label1.Text = "You selected" Then Dim ListPagenumbers As New ArrayList() For x = 1 To intPageCount ListPagenumbers.Add(x) Next ListPagenumbers.TrimToSize() Pagenumbers.DataSource = ListPagenumbers Pagenumbers.DataBind()
Pagenumbers.SelectedIndex = 0 End If
End If
':::::::::::::Lav en liste over billed foldere If Request("ShowFolders") = "" Then Dim Dir As String Dim Subdirs() As String Subdirs = directory.GetDirectories("C:\mywebsite\emma\billeder\") Dim FolderList As New ArrayList() FolderList.Add("Vælg en af Emmas Fotoserier") For Each Dir In Subdirs Dim foldernavn As String = System.IO.Path.GetFileName(Dir) FolderList.Add(foldernavn) Next FolderList.TrimToSize() ShowFolders.DataSource = FolderList ShowFolders.DataBind() End If
den linje hvor jeg insætter Dim RequestedFolder As String = ShowFolders.SelectedItem.ToString eller Dim RequestedFolder As String = "" RequestedFolder = ShowFolders.SelectedItem.ToString
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load BindData() End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click ShowFolders.SelectedIndex = 1 BindData() End Sub
Public Sub BindData() Dim RequestedFolder As String = ShowFolders.SelectedItem.Text
If RequestedFolder = "Option 1" Then Label1.Text = "Option 1.Selected" End If
If RequestedFolder <> "" And RequestedFolder <> "Option 1" Then Label1.Text = "Other.Selected" End If End Sub
Jeg prøvede at generere data i dropdownlisten dynamisk sådan her
Public Sub BindData() 'Får fejlen: Object reference not set to an instance of an object. Dim RequestedFolder As String = ShowFolders.SelectedItem.Text
If Not Page.IsPostBack Then ShowFolders.Items.Add("Option 1") ShowFolders.Items.Add("Option 2") ShowFolders.Items.Add("Option 3") End If
If RequestedFolder = "Option 1" Then Label1.Text = "Option 1.Selected" End If
If RequestedFolder <> "" And RequestedFolder <> "Option 1" Then Label1.Text = "Other.Selected" End If End Sub
men hvis jeg skriver sådan her virker det perfekt
Public Sub BindData() If Not Page.IsPostBack Then ShowFolders.Items.Add("Option 1") ShowFolders.Items.Add("Option 2") ShowFolders.Items.Add("Option 3") End If
Dim RequestedFolder As String = ShowFolders.SelectedItem.Text
If RequestedFolder = "Option 1" Then Label1.Text = "Option 1.Selected" End If
If RequestedFolder <> "" And RequestedFolder <> "Option 1" Then Label1.Text = "Other.Selected" End If End Sub
hmm tror næsten den er der nu, et af problemernu var at min dropdownliste først blev generet efter efter jeg prøvede at lave "Dim RequestedFolder As String = ShowFolders.SelectedItem.Text " Du må gerne få point nu hvis du vil du har været MEGET hjælpsom og jeg takker mange mange.
Hvorfor det stadig ikke virker helt, finder jeg nok ud af en gang (-:
Bare lav et svar og jeg giver dig point (hvis jeg kan finde ud af det)
Ok du hjalp mig til at hjælpe mig selv - LOL sådan er det nogle gange det er til at blive skør over at side med en kode der ikke virker, altid rart når andre kigger på der.
Public Sub BindData()
':::::::::::::Lav en liste over billed foldere If Request("ShowFolders")="" Then dim Dir as string dim Subdirs() as string Subdirs = Directory.GetDirectories("C:\mywebsite\emma\billeder\") Dim FolderList As New ArrayList FolderList.Add ("Vælg en af Emmas Fotoserier") For Each Dir in Subdirs Dim foldernavn as string = System.IO.Path.GetFileName(Dir) FolderList.Add (foldernavn) Next FolderList.TrimToSize() ShowFolders.DataSource = FolderList ShowFolders.DataBind end if
':::::::::::::::Hvis brugeren er gået tilbage til startsiden skal der ikke vises oversigt over billeder
'Dim RequestedFolder As String = ShowFolders.SelectedItem.ToString
Dim RequestedFolder As String If Not ShowFolders.SelectedItem Is Nothing Then RequestedFolder = ShowFolders.SelectedItem.Text session("RequestedF") = RequestedFolder End If
If Request("ShowFolders")="Vælg en af Emmas Fotoserier" Then
NavigationsHelp.Text = "<span class='normtekst'><br><br>Hejsa, det er så her jeg viser lidt billeder af mig og min famile.<br>For at gøre det lidt lettere at finde de billeder du gerne vil se, har jeg fået min far til, at opdele de billeder ham og mor har taget af mig, i nogle fotoserier.<br>Du kan vælge hvilken serie du gerne vil se billeder fra ved at bruge menuen ovenfor.<br>Rigtig god fornøjelse<br><br><b>Kærlig hilsen Emma</b></span>" PrevItem.visible = false NextItem.visible = false OverViewList.visible=false ShowOverviewButton.visible=true end if
If not RequestedFolder="" and not RequestedFolder="Vælg en af Emmas Fotoserier" Then NavigationsHelp.Text = "<br>Viser nu ovenstående af Emmas billedserier. Klik på de små billeder for at forstørre dem." OverViewList.visible=false ShowOverviewButton.visible=false PrevItem.visible = true NextItem.visible = true
'::::::::::::::Lav et Dataset som indeholder fil navne
Dim storefile As directory Dim directory As String Dim files As String() Dim File As String
Dim myDataSet as New DataSet() myDataSet.Tables.Add(New DataTable("filinfo")) myDataSet.Tables("filinfo").Columns.Add("Filnavn") myDataSet.Tables("filinfo").Columns.Add("Filtype")
For Each File In files Dim filnavn as string = System.IO.Path.GetFileName(File) Dim row As DataRow = myDataSet.Tables("filinfo").NewRow If Left(filnavn, 2) = "T_" then row(0) = filnavn myDataSet.Tables("filinfo").Rows.Add(row) end if Next
':::::::::::::::::Lav et nyt dataset med paging
Dim Sidenummer As String
If NextPrev.Text = "Test" then Sidenummer = Request("Pagenumbers") else Sidenummer = NextPrev.Text end if
Dim intVisPerSide As Integer = 10
Dim intMaxRecords As Integer Dim intRecordCount as String = CStr(myDataSet.Tables(0).Rows.Count) Dim intPageCount As Integer = Math.Ceiling(intRecordCount / intVisPerSide) Dim intLastPageItemCount As Integer = (intRecordCount Mod intVisPerSide) Dim intPageNumber As Integer Dim intStartRow As Integer
Dim PagedDataSet as New DataSet() PagedDataSet.Tables.Add(New DataTable("filinfo")) PagedDataSet.Tables("filinfo").Columns.Add("Filnavn") PagedDataSet.Tables("filinfo").Columns.Add("Filtype")
Dim NewDataTable As DataTable = PagedDataSet.Tables("filinfo") Dim OldDataTable As DataTable = myDataSet.Tables("filinfo")
Dim y As Integer Dim x As Integer
If Request("Pagenumbers") = "" Or Request("Pagenumbers") = "1" And NextPrev.Text = "Test" Or Label1.Text = "You selected" Then intPageNumber = 1 intStartRow = 0 Else intPageNumber = CType(Sidenummer , Integer) intStartRow = ((intPageNumber - 1) * intVisPerSide) End if
If intPageCount <> intPageNumber then intMaxRecords = intVisPerSide - 1 Else intMaxRecords =intLastPageItemCount -1 End if
For x = intStartRow To (intStartRow + intMaxRecords) NewDataTable.ImportRow(OldDataTable.Rows(x)) Next
'::::::::::::::::Lav en oversigt over hvor mange sider der er
If Label1.Text = "You selected" then Dim ListPagenumbers As New ArrayList For x = 1 to intPageCount ListPagenumbers.Add(x) Next ListPagenumbers.TrimToSize() Pagenumbers.DataSource = ListPagenumbers Pagenumbers.DataBind
Pagenumbers.SelectedIndex = 0 end if
End If
End Sub
'::::::::::::::::::::::::::::::::::::Vis billede efter tryk på thumbnail Public Sub ShowBig(Src As Object, Args As CommandEventArgs) Dim test as String = Args.CommandArgument test = Replace(test, "T_", "") image.Text = test ShowImage.visible=true ShowThumbs.visible=false End Sub
':::::::::::::::::::::::::::::::::.Funktion til Oversigt over alle billeder på sitet Public Sub ShowOverview(sender As Object, e As System.EventArgs) OverViewList.visible=true NavigationsHelp.Text = "<span class='normtekst'><br><br>Her er en oversigt over alle billederne på min hjemmeside</span>" dim Dir as string dim Subdirs() as string Subdirs = Directory.GetDirectories("C:\mywebsite\emma\billeder\") Dim FolderList As New ArrayList Dim OverviewDataSet as New DataSet() OverviewDataSet.Tables.Add(New DataTable("filinfo")) OverviewDataSet.Tables("filinfo").Columns.Add("Foldernavn") OverviewDataSet.Tables("filinfo").Columns.Add("Imagenumbers") OverviewDataSet.Tables("filinfo").Columns.Add("Updates") OverviewDataSet.Tables("filinfo").Columns.Add("NewImage")
For Each Dir in Subdirs Dim foldernavn as string = System.IO.Path.GetFileName(Dir)
Dim storefile As directory Dim directory As String Dim files As String() Dim File As String Dim ImageCounter As String Dim NumberUpdates As String = 0 Dim NewImage As String files = storefile.GetFiles("C:\mywebsite\emma\billeder\" & foldernavn, "*")
For Each File In files Dim filnavn as string = System.IO.Path.GetFileName(File) Dim fInfo = new FileInfo(File) Dim CreationDate as DateTime= fInfo.CreationTime
If Left(filnavn, 2) = "T_" then
if DateDiff("d", CreationDate, now ) < 7 then NumberUpdates = NumberUpdates +1 NewImage = "<img src='gfx/new.gif'>" end if
ImageCounter = ImageCounter +1 End if Next
Dim row As DataRow = OverviewDataSet.Tables("filinfo").NewRow row(0) = foldernavn row(1) = ImageCounter row(2) = NumberUpdates row(3) = NewImage OverviewDataSet.Tables("filinfo").Rows.Add(row)
ImageCounter = 0 NumberUpdates = 0 NewImage = ""
Next
FolderList.TrimToSize() Dim myDataView as DataView = OverviewDataSet.Tables("filinfo").DefaultView myDataView.Sort = "foldernavn ASC" Overview.DataSource = myDataView Overview.DataBind
np - Jo til det med koden, men hva fand'n så super speciel er den jo heller ikke og jeg håber da ikke der er så mange kode tyve der smutter forbi dette indlæg, så det går nok (-:
DW
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.