Avatar billede verakso Nybegynder
21. marts 2007 - 12:19 Der er 4 kommentarer og
1 løsning

Ændre på filnavn i datagridview

Denne er oprindeligt postet på dotnetforum.dk, men da der ikke rigtigt er kommet noget feedback endnu poster jeg den også her.

Måske der alligevel sidder flere ASP.NET kyndige her, end på dotnetformum.dk ;)



Jeg har en liste af filer der listes i et DataGrid

DirectoryInfo dirInfo = new DirectoryInfo(Server.MapPath(@"~\images").ToString();
giffList.DataSource = dirInfo.GetFiles("*.gif");
giffList.DataBind();

Filnavne er noget i stil med blahblah_referencenr.gif og det jeg gerne vil opnå er at kunne liste referencenr, blahblah og filnavnet hver for sig i et DataGrid (eller ligende for at kunne sortere filerne)

Jeg har forsøgt denne, men det virker ikke helt:

<asp:DataGrid runat="server" id="giffList" AutoGenerateColumns="false" AllowSorting="true">
<Columns>
<asp:TemplateColumn HeaderText="Ref nr.">
<ItemTemplate>
<%# Eval("Name").ToString().Substring((Eval("Name").ToString().LastIndexOf("_")+1),Eval("Name".ToString().LastIndexOf("."))) %>
</ItemTemplate>
</asp:TemplateColumn>
<asp:HyperLinkColumn DataNavigateUrlField="Name" DataTextField="Name" HeaderText="File Name" />
<asp:BoundColumn DataField="LastWriteTime" HeaderText="Last Write Time" ItemStyle-HorizontalAlign="Center" DataFormatString="{0:d}" />
<asp:BoundColumn DataField="Length" HeaderText="File Size" ItemStyle-HorizontalAlign="Right" DataFormatString="{0:#,### bytes}" />
</Columns>
</asp:DataGrid>

Så, hvordan kan jeg undervejs ændre på de data jeg ønsker at liste, der må være en ret nem og simpel måde jeg har overset.

Når dette er løst, skal jeg så blot lige hitte ud af, hvordan jeg kan laven en event der gør at når man flytter musemarkøren over en række, så vises selve gif billedet i et <DIV> layer, men den tid den udfordring...
Avatar billede snepnet Nybegynder
21. marts 2007 - 13:12 #1
Du gøre det sådan som du har taget tilløb til, hvor jeg ville foreslå dig at lave en lille metode der returner dig det du ønsker - istedet for at fedte med det i din markup.

Du kunne også gå lidt videre med det (såfremt det er en liste du har brug for flere steder - måske ikke engang udelukkende i forbindelse med præsentationen), og bygge det så du har enkelt adgang til informationen:

Hvis det du ønsker er et grid der ser sådan her ud:
<asp:DataGrid runat="server" id="giffList" AutoGenerateColumns="false" AllowSorting="true">
    <Columns>
        <asp:BoundColumn DataField="Prefix" HeaderText="Prefix" />
        <asp:BoundColumn DataField="NameWithoutPrefix" HeaderText="Name" />
        <asp:BoundColumn DataField="Extension" HeaderText="Extension" />
        <asp:HyperLinkColumn DataNavigateUrlField="Name" DataTextField="Name" HeaderText="File Name" />
        <asp:BoundColumn DataField="LastWriteTime" HeaderText="Last Write Time" ItemStyle-HorizontalAlign="Center" DataFormatString="{0:d}" />
        <asp:BoundColumn DataField="Length" HeaderText="File Size" ItemStyle-HorizontalAlign="Right" DataFormatString="{0:#,### bytes}" />
    </Columns>
</asp:DataGrid>

Altså med de respektive oplysninger i kolonner for sig - kunne du lave sådan noget som det her:

DirectoryInfo dirInfo = new DirectoryInfo(@"C:\giffer");
giffList.DataSource = new SpecialFileInfoCollection(dirInfo.GetFiles("*.gif"));
giffList.DataBind();

Hvor din specialfilecollection ser sådan her ud:
public class SpecialFileInfoCollection : List<SpecialFileInfo>
{
    public SpecialFileInfoCollection(FileInfo[] files)
    {
        foreach (FileInfo file in files)
        {
            this.Add(new SpecialFileInfo(file));
        }
    }
}

Og så mangler du så bare din egen SpecialFileInfo-type:
public class SpecialFileInfo
{
    private FileInfo m_File;

    public SpecialFileInfo(FileInfo file)
    {
        m_File = file;
    }

    public string Extension
    {
        get { return m_File.Extension.Remove(0,1); }
    }

    public DateTime LastWriteTime
    {
        get { return m_File.LastWriteTime; }
    }


    public long Length
    {
        get { return m_File.Length; }
    }

    public string Prefix
    {
        get { return m_File.Name.Remove(m_File.Name.IndexOf("_")); }
    }

    public string Name
    {
        get { return m_File.Name; }
    }

    public string NameWithoutPrefix
    {
        get
        {
            int start = m_File.Name.IndexOf("_")+1;
            int cutlength = m_File.Name.IndexOf(".") - start;
            return m_File.Name.Substring(start, cutlength);
        }
    }
}

Så kan du pakke al dillerdalleret ind i den - så du slipper for at bikse med det i andre sammenhænge.

Du kan jo lige skrive hvad du helst vil - ovenstående eksemple burde virke, såfremt dine filer overholder den navnekonvention du har oplyst.

Mvh
Avatar billede verakso Nybegynder
06. august 2007 - 14:09 #2
Jeg kommer tilsyneladene ikke ret tit forbi...

Men snepnet, smid et svar - det virker rigtigt godt.

Det driller dog lidt, med at få sortering på gridviews til at virke, men eller virker det fint
Avatar billede verakso Nybegynder
24. september 2007 - 23:09 #3
Halo snepnet er du der?
Smid et svar så jeg kan lukke
Avatar billede verakso Nybegynder
29. januar 2008 - 12:54 #4
Hallo sepnet - kan jeg lukke eller har du for travlt i dit nye job?
Avatar billede snepnet Nybegynder
30. januar 2008 - 21:28 #5
Et svar kommer her :o)
Mvh
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester