Avatar billede area404 Nybegynder
21. april 2008 - 00:57 Der er 10 kommentarer og
2 løsninger

Fil liste

Hej!

Jeg vil gerne have en liste over filer der ligger i en mappe, men...
Jeg bruger GridView med auto generate fields, så får jeg alle mulige colums med dato'er osv. som jeg ikke har brug for. Hvordan kan jeg selv styre dette?

Koden ser således ud:

    <asp:GridView ID="GridView1" runat="server" AllowPaging="True" PageIndex="1"
        Width="100px">
        <PagerSettings Mode="NumericFirstLast" PageButtonCount="1" />
    </asp:GridView>
------------------------------------------------
        DirectoryInfo dirInfo = new
        DirectoryInfo(Server.MapPath("/Files/"));
        GridView1.DataSource = dirInfo.GetFiles("*.*");
        GridView1.DataBind();

Desuden bruger jeg paging til når fil-listen overskrider 10 filer. dette virker dog ikke, jeg får bare error:

The GridView 'GridView1' fired event PageIndexChanging which wasn't handled.

Skal lige nævnes jeg bruger VS2008.
Håber nogen kan hjælpe :-)
/Ron
Avatar billede nielle Nybegynder
21. april 2008 - 06:55 #1
Jeg ville nok vælge FileInfo i stedet for DirectoryInfo.

De andre ting skal jeg gerne kigge på når jeg får tid, men det kan jo være at andre kommer først. :^)

Mht. den exception du får, så lyder det som om at du ikke har koblet en eventhandler på din PageIndexChanging event - det skal du gøre.
Avatar billede mikalj Nybegynder
21. april 2008 - 09:40 #2
dirInfo.GetFiles() returnerer et array af FileInfo, så det er rigtigt nok det han gør.

Jeg tror bare du skal læse lidt op på gridviews area404, at selv bestemme hvilke kolonner der skal vises er en af de mest basale funktioner gridview har.

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false">
  <Columns>
    <asp:BoundField DataField="Name" HeaderText="Filnavn" />
    <asp:BoundField DataField="Length" HeaderText="Størrelse i bytes" />
  </Columns>
</asp:GridView>

Name attributerne skal være navnet på en property i FileInfo objektet.

GridView er super avanceret, og du kan benytte dig af tonvis af features på det.
Avatar billede area404 Nybegynder
21. april 2008 - 12:40 #3
det ser fint ud mikalj!
Hvilke dataFields har jeg mulighed for at bruge?
Avatar billede mikalj Nybegynder
21. april 2008 - 15:55 #4
Alle public properties på FileInfo objektet
http://msdn2.microsoft.com/en-us/library/system.io.fileinfo_members.aspx

hvilket også er de samme som gridviewet selv viste med AutoGenerateColumns="true"
Avatar billede nielle Nybegynder
21. april 2008 - 18:27 #5
mikalj har vis hvordan du får de relevante felter vist.

Her er så skitserte hvordan du får paging-delen på:

    <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false"
        AllowPaging="true" onpageindexchanging="GridView1_PageIndexChanging">
        <Columns>
            <asp:BoundField DataField="Name" HeaderText="Filnavn" />
            <asp:BoundField DataField="Length" HeaderText="Størrelse i bytes" />
        </Columns>
    </asp:GridView>

- kombineret med dette i codebehind:

        protected void Page_Load(object sender, EventArgs e)
        {
            GridView1DataBind();
        }

        protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)
        {
            GridView1.PageIndex = e.NewPageIndex;
            GridView1DataBind();
        }

        private void GridView1DataBind()
        {
            DirectoryInfo dirInfo = new DirectoryInfo(Server.MapPath("/Files/"));
            GridView1.DataSource = dirInfo.GetFiles("*.*");
            GridView1.DataBind();
        }
Avatar billede area404 Nybegynder
21. april 2008 - 22:48 #6
Det er kanon!
hvis jeg nu skal skal lave et link til filen udfra "name".. Jeg kan ikke lige se hvordan det skulle fungere. Det er jo en helt anden verden fra det gamle ASP. Ellers smid svar :-)
Avatar billede mikalj Nybegynder
21. april 2008 - 23:18 #7
Ja, så er det, at det begynder at blive lidt avanceret

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false"
AllowPaging="true" onpageindexchanging="GridView1_PageIndexChanging">
  <Columns>
    <asp:TemplateField>
      <ItemTemplate>
        <asp:HyperLink ID="HyperLink1" runat="server" Text='<%# Eval("Name") %>'
          NavigateUrl='<%# Eval("Name", "/xxx/yyy/zzz/{0}") %>'></asp:HyperLink>
      </ItemTemplate>
    </asp:TemplateField>
    <asp:BoundField DataField="Length" HeaderText="Størrelse i bytes" />
  </Columns>
</asp:GridView>

Boundfields er den nemmeste måde at få et gridview til at vise noget tekst. Men med et templatefield kan du sætte hvad som helst ind som du har lyst til, og det vil komme i alle felter i den kolonne.

Eval("") er en metode som tager navnet på en property eller et felt i datasourcen og returnerer dens værdi. Den kan desuden tage et ekstra argument, og parse det på samme måde som string.Format(). Altså en string hvor {0} bliver erstattet af den returnerede værdi. I det eksempel her. skal du selvfølgelig sætte den rigtige sti in før filens navn.

P.S. Helt urelateret, men string.Format() er en super handy metode som du kan spare rigtigt meget arbejde ved at bruge.
Avatar billede mikalj Nybegynder
21. april 2008 - 23:19 #8
Hvis du er opsat på at lære asp.net kan det klart anbefales at købe en bog om det. Der er simpelthen bare så meget du ikke får med i tutorials of fora på nettet.
Avatar billede nielle Nybegynder
26. april 2008 - 07:33 #9
Du skal vist give mikalj de fleste point på denne her.

Svar :^)
Avatar billede mikalj Nybegynder
26. april 2008 - 12:28 #10
svar
Avatar billede area404 Nybegynder
26. april 2008 - 15:02 #11
Håber det er ok :-)
Avatar billede nielle Nybegynder
26. april 2008 - 17:00 #12
Fint :^)
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