2009-07-16 12 views
0

Ich habe folgenden Code in Seite zu ladenIn Bezug auf ItemDataBound in Repeater

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 
     If Not IsPostBack Then 
      GetDetails() 
      PopulateRepeater() 
     End If 
    End Sub 

Sub PopulateRepeater() 
     Dim dt As DataTable = GetDetails() 
     Dim dtDoc As DataTable = objdoc.GetDocDetails(Session("RegID")) 
     If dtDoc.Rows.Count > 0 Then 
      Dim strUserName As String = dt.Rows(0)("Name") 
      Dim files As IList(Of FileInfo) = New List(Of FileInfo)() 
      Dim filters As String = "*.jpg;*.png;*.gif" 
      For Each filter As String In filters.Split(";"c) 
       Dim fit As FileInfo() = New DirectoryInfo(Me.Server.MapPath("../SiteImages/" & strUserName & "/" & Session("RegID") & "/")).GetFiles(filter) 
       For Each fi As FileInfo In fit 
        files.Add(fi) 
       Next 
      Next 
      strPath = Server.MapPath("../SiteImages/" & strUserName & "/" & Session("RegID") & "/") 
      Me.Repeater1.DataSource = files 
      Me.Repeater1.DataBind() 
     End If 

     End Sub 

ich folgenden Code habe in ItemDataBound

Dim ThViewr As Bright.WebControls.ThumbViewer = DirectCast(e.Item.FindControl("Th1"), Bright.WebControls.ThumbViewer) 
     Dim dtUser As DataTable = GetDetails() 
     Dim dtDoc As DataTable = objdoc.GetDocDetails(Session("RegID")) 
     Dim strUserName As String = dtUser.Rows(0)("Name") 
     If dtDoc.Rows.Count > 0 Then 
      For i As Integer = 0 To dtDoc.Rows.Count - 1 
       Dim ImagePath As String = "../SiteImages/" & strUserName & "/" & Session("RegID") & "/" + dtDoc.Rows(i)("ImageName") 
       ThViewr.ImageUrl = ImagePath 
      Next 

     End If 

Mein aspx enthält

<div style="clear:both;"> 
       <asp:Repeater ID="Repeater1" runat="server" > 
        <ItemTemplate> 
         <span style="padding:2px 10px 2px 10px"> 

          <bri:ThumbViewer Id="Th1" runat="server" Height="100px" Width="100px"/> 
         </span> 
        </ItemTemplate> 
       </asp:Repeater> 
      </div> 

Wenn der imagePath =“. ./SiteImages/Ram/PR/First.jpg "Bedeutet, dass der Ordner PR genau 3 Bilder enthält, nämlich First.jpg, Second.jpg und Third.jpg.

Jetzt mit dem obigen Code kommen drei Bilder aber Third.jpg wiederholt sich 3 mal.First.jpg und Second.jpg kommt nicht. Kann jemand helfen, dieses zu lösen.

Antwort

1

Das ItemDataBound-Ereignis wird für jedes Objekt in der gebundenen Liste einmal ausgelöst, sodass es in Ihrem Fall dreimal ausgelöst wird. einmal für jede Datei. Sie sollten nicht Ihre Datentabelle durchlaufen, sondern den aktuellen Eintrag aus den Ereignisargumenten holen.

Update: Blick auf den Code Ich finde es etwas verwirrend. Sie binden eine Liste von FileInfo-Objekten an den Repeater, holen jedoch Daten von einer DataTable, wenn die Elemente gebunden sind. Ich vermute, dass Sie die Dateien gefunden zeigen wollen, und ich denke, dass der folgende Code in ItemDataBound wird für Sie das tun:

Dim ThViewr As Bright.WebControls.ThumbViewer = DirectCast(e.Item.FindControl("Th1"), Bright.WebControls.ThumbViewer) 
Dim dtUser As DataTable = GetDetails() 
Dim strUserName As String = dtUser.Rows(0)("Name") 
Dim ImagePath As String = "../SiteImages/" & strUserName & "/" & Session("RegID") & "/" + DirectCast(e.Item.DataItem, FileInfo).Name 
ThViewr.ImageUrl = ImagePath  
+0

Can u zeigen 1 zB: – user42348

+0

Es worked.Thanks viel. – user42348