如何仅将文件夹中的某些图像显示到ASP.NET中的Repeater中

我有一个Repeater,它将我的所有图像都放在一个文件夹中并显示它。 但是我必须做什么代码更改只允许让我们在我的转发器中显示Image1.jpg和Image2.jpg。 我不希望转发器显示我文件夹中的所有图像。

我的中继器

 

我的代码背后 – PAGE LOAD

 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 oList = new System.Collections.Generic.List(); 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(); } } 

我的代码背后 – Repeater的ItemDataBound事件代码

 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" ); } } 

回答:

我更新的页面加载

 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 oList = new System.Collections.Generic.List(); string[] extensions = { "*.jpg", "*.png" }; List files = new List(); 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(); } 

您要显示的图像名称是什么格式? 如果您知道可以构建在列出目录内容时使用的filter:

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

将列出以“1”结尾的所有jpg文件

编辑:

而不是:

 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 )); } 

你有:

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

编辑2:

我已经快速搜索了,看起来Get Files不会有多个扩展名,所以你必须分别搜索每种类型的扩展名:

 string[] extensions = {"*.jpg" , "*.png" }; List files = new List(); 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 )); } 

最简单的方法是将它们全部加载到List <>中,然后使用Linq过滤掉您想要的那些。

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(); } } 

在将其绑定到转发器控件之前,您需要做的是从列表中过滤掉您不希望显示的所有图像。