2009-04-07 10 views
1

J'ai un répéteur qui prend toutes mes images dans un dossier et l'affiche. Mais quels changements de code dois-je faire pour permettre uniquement de dire Image1.jpg et Image2.jpg à afficher dans mon répéteur. Je ne "veux le répéteur pour afficher toutes les images dans mon dossierComment afficher uniquement certaines images dans un dossier dans un répéteur dans ASP.NET

Mon Répéteur

<asp:Repeater ID="repImages" runat="server" OnItemDataBound="repImages_ItemDataBound"> 
<HeaderTemplate><p></HeaderTemplate> 
<ItemTemplate> 
    <asp:HyperLink ID="hlWhat" runat="server" rel="imagebox-bw"> 
    <asp:Image ID="imgTheImage" runat="server" /> 
    </asp:HyperLink> 
</ItemTemplate> 
<FooterTemplate></p></FooterTemplate> 
</asp:Repeater> 

Mon code derrière -. PAGE CHARGE

protected void Page_Load(object sender, EventArgs e) 
    { 
     if (!IsPostBack) 
     { 
      string sBasePath = System.Web.HttpContext.Current.Request.ServerVariables["APPL_PHYSICAL_PATH"]; 
      if (sBasePath.EndsWith("\\")) 
       sBasePath = sBasePath.Substring(0,sBasePath.Length-1); 

      sBasePath = sBasePath + "\\" + "pics"; 

      System.Collections.Generic.List<string> oList = new System.Collections.Generic.List<string>(); 
      foreach (string s in System.IO.Directory.GetFiles(sBasePath, "*.*")) 
      { 
       //We could do some filtering for example only adding .jpg or something 
       oList.Add(System.IO.Path.GetFileName(s)); 

      } 
      repImages.DataSource = oList; 
      repImages.DataBind(); 
     } 

    } 

Mon code derrière - code d'événement ItemDataBound de répéteur

protected void repImages_ItemDataBound(object sender, RepeaterItemEventArgs e) 
    { 
     if (e.Item.ItemType == ListItemType.AlternatingItem || 
      e.Item.ItemType == ListItemType.Item) 
     { 
      string sFile = e.Item.DataItem as string; 

      //Create the thumblink 
      HyperLink hlWhat = e.Item.FindControl("hlWhat") as HyperLink; 
      hlWhat.NavigateUrl = ResolveUrl("~/pics/" + sFile ); 
      hlWhat.ToolTip = System.IO.Path.GetFileNameWithoutExtension(sFile); 
      hlWhat.Attributes["rel"] = "imagebox-bw"; 

      Image oImg = e.Item.FindControl("imgTheImage") as Image; 
      oImg.ImageUrl = ResolveUrl("~/createthumb.ashx?gu=/pics/" + sFile + "&xmax=100&ymax=100"); 


     } 

    } 

RÉPONSE:

Ma mise à jour chargement de la page

protected void Page_Load(object sender, EventArgs e) 
    { 
     if (!IsPostBack) 
     { 
      string sBasePath = System.Web.HttpContext.Current.Request.ServerVariables["APPL_PHYSICAL_PATH"]; 
      if (sBasePath.EndsWith("\\")) 
       sBasePath = sBasePath.Substring(0,sBasePath.Length-1); 

      sBasePath = sBasePath + "\\" + "pics"; 

      System.Collections.Generic.List<string> oList = new System.Collections.Generic.List<string>(); 

      string[] extensions = { "*.jpg", "*.png" }; 

      List<string> files = new List<string>(); 

      foreach (string filter in extensions) 
      { 
       files.AddRange(System.IO.Directory.GetFiles(sBasePath, filter)); 
       oList.Add(System.IO.Path.GetFileName(filter)); 
      } 


      repImages.DataSource = oList; 
      repImages.DataBind(); 
     } 
+0

Vous semblez savoir que vous souhaitez filtrer la liste, et où vous devez le faire - ce qui est exactement votre question? –

+0

Maintenant dans ma section EDIT ...... son ne renvoyant aucune image – Etienne

Répondre

4

De quel format sont les noms d'image que vous souhaitez afficher? Si vous savez que vous pouvez construire un filtre à utiliser lors de lister le contenu du répertoire:

string[] files = Directory.GetFiles(folder, "*1.jpg"); 

la liste de tous les fichiers jpg qui se terminent par « 1 »

EDIT:

Au lieu de ayant:

foreach (string s in System.IO.Directory.GetFiles(sBasePath, "*.*")) 
{ 
    //We could do some filtering for example only adding .jpg or something 
    oList.Add(System.IO.Path.GetFileName(s)); 
} 

Vous auriez:

string[] files = System.IO.Directory.GetFiles(sBasePath, "*.jpg") 
foreach (string s in files) 
{ 
    oList.Add(System.IO.Path.GetFileName(s)); 
} 

EDIT 2:

Je l'ai fait une recherche rapide et il semble que obtenir des fichiers ne prendra pas plusieurs extensions, vous devrez rechercher chaque type d'extension séparément:

string[] extensions = {"*.jpg" , "*.png" }; 

List<string> files = new List<string>(); 
foreach(string filter in extensions) 
{ 
    files.AddRange(System.IO.Directory.GetFiles(path, filter)); 
} 
foreach (string s in files) 
{ 
    oList.Add(System.IO.Path.GetFileName(s)); 
} 
+0

Ils peuvent être au format .png ou .jpg – Etienne

+0

Où dois-je placer ce code. Ou que dois-je remplacer? Désolé je ne suis pas très bon avec C#. – Etienne

+0

@Etienne - Je ne suis pas trop chaud sur Regex, mais il y aura une expression régulière que vous pouvez utiliser pour cela - Je vais faire une recherche et voir si je peux le trouver – ChrisF

0

Ce que vous devez faire est de filtrer toutes les images que vous ne souhaitez pas afficher de votre liste avant de le lier à votre commande de répéteur.

+0

Comment le ferais-je dans le code? – Etienne

2

Le plus simple est de les charger tous dans une liste <> puis d'utiliser Linq pour filtrer ceux que vous voulez.

VS2005

public class GetFiles 
{ 

    public static void Main(string[] args) 
    { 
     FileInfo[] files = 
      new DirectoryInfo(@"D:\downloads\_Installs").GetFiles(); 
     ArrayList exefiles = new ArrayList(); 

     foreach (FileInfo f in files) 
     { 
      if (f.Extension == ".exe") // or whatever matching you want to do. 
      { 
       exefiles.Add(f); 
      } 
     } 

     foreach (FileInfo f in exefiles) 
     { 
      Console.WriteLine(f.FullName); 
     } 
     Console.ReadKey(); 
    } 
} 

VS2008

public class GetFiles 
{ 
    public static void Main(string[] args) 
    { 
     FileInfo[] files = 
      new DirectoryInfo(@"D:\downloads\_Installs").GetFiles(); 

     var exefiles = from FileInfo f in files 
         where f.Extension == ".exe" 
         select f; 

     foreach (FileInfo f in exefiles) 
     { 
      Console.WriteLine(f.FullName); 
     } 

     Console.ReadKey(); 
    } 
} 
+0

Ne peux pas utiliser Linq car J'utilise VS 2005 – Etienne

+0

Ajout de la version VS2005 ... – klkitchens

Questions connexes