C# 如何只将文件夹中的某些图像显示到 ASP.NET 中的中继器中

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/724928/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-04 22:36:54  来源:igfitidea点击:

How to only display certain images in a folder into a Repeater in ASP.NET

c#asp.netimagerepeateritemdatabound

提问by Etienne

I have a Repeater that takes all my images in a folder and display it. But what code changes must I make to only allow lets say Image1.jpg and Image2.jpg to be displayed in my repeater. I don"t want the repeater to display ALL the images in my folder.

我有一个中继器,可以将我所有的图像放在一个文件夹中并显示它。但是我必须进行哪些代码更改才能只允许在我的中继器中显示 Image1.jpg 和 Image2.jpg。我不希望中继器显示我文件夹中的所有图像。

My Repeater

我的中继器

<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>

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

    }

My Code behind - Repeater's ItemDataBound event code

我的代码背后 - 中继器的 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" );


        }

    }

ANSWER:

回答:

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

采纳答案by ChrisF

What format are the image names that you want to display? If you know that you can construct a filter to use when listing the contents of the directory:

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

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

Will list all the jpg files that end in "1"

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

EDIT:

编辑:

Instead of having:

而不是:

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

You'd have:

你会有:

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

EDIT 2:

编辑2:

I've done a quick search and it looks like Get Files won't take multiple extensions, so you'll have to search for each type of extension separately:

我进行了快速搜索,看起来 Get Files 不会采用多个扩展名,因此您必须分别搜索每种类型的扩展名:

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

回答by Andy Rose

What you will need to do is filter out all the images you do not wish to display from your list before you bind it to your repeater control.

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

回答by klkitchens

Easiest way to is load them all into a List<> and then use Linq to filter out the ones you want.

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

VS2005

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

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