Как отображать только определенные изображения в папке в повторитель в ASP.NET - PullRequest
1 голос
/ 07 апреля 2009

У меня есть повторитель, который берет все мои изображения в папку и отображает их. Но какие изменения в коде я должен сделать, чтобы разрешить отображение изображений Image1.jpg и Image2.jpg в моем репитере Я не хочу, чтобы повторитель отображал ВСЕ изображения в моей папке.

Мой повторитель

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

Мой код позади - НАГРУЗКА СТРАНИЦЫ

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

    }

Мой код позади - код события 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<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();
        }

Ответы [ 3 ]

4 голосов
/ 07 апреля 2009

В каком формате имена изображений вы хотите отобразить? Если вы знаете, что вы можете создать фильтр для использования при выводе содержимого каталога:

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

Перечислит все файлы jpg, заканчивающиеся на "1"

EDIT:

Вместо:

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<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 ));
}
2 голосов
/ 07 апреля 2009

Самый простой способ - загрузить их все в список <>, а затем использовать 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();
    }
}
0 голосов
/ 07 апреля 2009

Вам нужно будет отфильтровать все изображения, которые вы не хотите отображать, из своего списка, прежде чем привязать его к своему контроллеру повторителя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...