Avatar billede strikerdk Novice
12. november 2007 - 18:46 Der er 11 kommentarer og
1 løsning

Hente filliste fra Folder vha. Gridview

Hej eksperter - så er jeg her igen :-)

Jeg har fundet et eksempel hvor et Gridview henter en filliste ind fra en Filmappe i roden. Eksempelplet er baseret på at Gridviewét anvender en source control (FolderContentDatasource) og giver mulighed for at angive hvilken sti man vil indhente fillisten fra. Eks: c:/mappenavn

Eksemplet fungerer 100% lokalt med en angivet sti eks: c://bla/bla - men jeg kan ikke se hvad der går galt, når eksemplet ryger op på en server. Den vil ikke godkende stien den skal hente fillisten fra (Altså mappen på serveren).

Jeg har omkranset der hvor jeg tror fejlen er med 5 stjerner på hver side nede i gridview.

eksemplet ser således ud: (Normalt VB men konverteret til C#)
------------------------------------------------------------------
cs:
------------------------------------------------------------------

protected void FolderContentsDataSource1_Selected(object sender, rw.FolderContentsDataSourceStatusEventArgs e)
    {
        if ((e.Exception != null))
        {
            lblError.Text = e.Exception.Message;
            e.ExceptionHandled = true;
        }
    }

    protected void gvFile_RowDeleted(object sender, System.Web.UI.WebControls.GridViewDeletedEventArgs e)
    {
        if ((e.Exception != null))
        {
            lblError.Text = e.Exception.Message;
            e.ExceptionHandled = true;
        }
    }

    protected void gvFile_RowUpdated(object sender, System.Web.UI.WebControls.GridViewUpdatedEventArgs e)
    {
        if ((e.Exception != null))
        {
            lblError.Text = e.Exception.Message;
            e.ExceptionHandled = true;
        }
    }
------------------------------------------------------------------
ASP.NET
------------------------------------------------------------------
<asp:TextBox ID="tbFolder" runat="server" *****Text="/Files"***** Visible="false"></asp:TextBox>
        <asp:Button ID="btnShow" runat="server" Text="Show contents" CausesValidation="false" /><br />
                 
        <asp:GridView ID="GridView2" runat="server" DataSourceID="FolderContentsDataSource1" AutoGenerateColumns="False" AllowPaging="True"
            AllowSorting="True" OnRowDeleted="gvFile_RowDeleted" OnRowUpdated="gvFile_RowUpdated" BackColor="White" BorderColor="#999999" BorderStyle="None" CellPadding="3" GridLines="Vertical" Width="400px">
            <HeaderStyle CssClass="headerstyle" BackColor="#000084" Font-Bold="True" ForeColor="White" />
            <AlternatingRowStyle CssClass="altstyle" BackColor="#DCDCDC" />
            <RowStyle CssClass="itemstyle" BackColor="#EEEEEE" ForeColor="Black" />
            <Columns>
                <asp:BoundField DataField="Name" HeaderText="Filnavn" SortExpression="Name" />
                <asp:BoundField DataField="Size" HeaderText="Størrelse" SortExpression="Size" ReadOnly="True" >
                    <ItemStyle HorizontalAlign="Right" />
                </asp:BoundField>
                <asp:BoundField DataField="Created" HeaderText="Uploadet" SortExpression="Created"
                    ReadOnly="True"  />
                <asp:TemplateField>
                    <ItemTemplate>
                        &nbsp;&nbsp;
                        <asp:LinkButton ID="btnRename" runat="server" CommandName="Edit" CausesValidation="false"
                            CommandArgument='<%# Container.DataItemIndex %>' Text="Rename" ToolTip="Skift filnavnet"></asp:LinkButton>
                        <asp:LinkButton ID="btnDelete" runat="server" CommandName="Delete" CausesValidation="false"
                            CommandArgument='<%# Container.DataItemIndex %>' Text="delete" OnClientClick="return confirm('Er du sikker på at du vil slette filen?');"></asp:LinkButton>
                    </ItemTemplate>
                    <EditItemTemplate>
                        &nbsp;&nbsp;
                        <asp:LinkButton ID="btnUpdate" runat="server" CommandName="Update" Text="update"
                            CommandArgument='<%# Container.DataItemIndex %>'></asp:LinkButton>&nbsp;
                        <asp:LinkButton ID="btnCancel" runat="server" CommandName="Cancel" CausesValidation="false"
                            Text="cancel"></asp:LinkButton>
                    </EditItemTemplate>
                    <ItemStyle HorizontalAlign="Center" />
                </asp:TemplateField>
            </Columns>
            <FooterStyle BackColor="#CCCCCC" ForeColor="Black" />
            <SelectedRowStyle BackColor="#008A8C" Font-Bold="True" ForeColor="White" />
            <PagerStyle BackColor="#999999" ForeColor="Black" HorizontalAlign="Center" />
        </asp:GridView>
        <cc1:FolderContentsDataSource ID="FolderContentsDataSource1" runat="server" OnSelected="FolderContentsDataSource1_Selected">
            <SelectParameters>
                <asp:ControlParameter Name="Directory" Type="String" ControlID="tbFolder" PropertyName="Text" />
            </SelectParameters>
        </cc1:FolderContentsDataSource>
        <asp:Label ID="lblError" runat="server" EnableViewState="False" ForeColor="Red"></asp:Label></td>

------------------------------------------------------------------
Avatar billede strikerdk Novice
12. november 2007 - 18:52 #1
Fejlen der meddeles er følgende:

Could not find a part of the path 'c:\windows\system32\inetsrv\Files'
Avatar billede neoman Novice
12. november 2007 - 19:43 #2
Såfremt du har en mappe som hedder Files i roden af dit site, så prøv med
*****Text="~/Files"*****
Avatar billede strikerdk Novice
12. november 2007 - 20:25 #3
Her generere den samme fejl:

Could not find a part of the path 'c:\windows\system32\inetsrv\~\Files'.
Avatar billede neoman Novice
12. november 2007 - 20:50 #4
Det ser ud til at der er et eller andet indbygget i den der foldercontentsdatasource som skal bygges om - der skal sikkert en Server.MapPath("~/Files") ind eller et eller andet sted, for den kigger tydeligvis lokalt.
Avatar billede strikerdk Novice
12. november 2007 - 20:56 #5
Eksemplet er fundet her: http://www.rekenwonder.com/aspnet/foldercontentsdatasource.html
Nederst på denne side, smider manden også noget kode fra content datasource. Men jeg synes ikke der er noget at se der overhovedet.

CODE:

Protected Overrides Function ExecuteSelect(ByVal arguments As System.Web.UI.DataSourceSelectArguments) As System.Collections.IEnumerable
    Dim dt As New DataTable()
    dt.Columns.Add("Name", System.Type.GetType("System.String"))
    dt.Columns.Add("Size", System.Type.GetType("System.Int64"))
    dt.Columns.Add("Modified", System.Type.GetType("System.DateTime"))
    dt.Columns.Add("Created", System.Type.GetType("System.DateTime"))
    dt.Columns.Add("Accessed", System.Type.GetType("System.DateTime"))
    dt.Columns.Add("IsFolder", System.Type.GetType("System.Boolean"))

    Dim exc As Exception = Nothing
    Dim dv As DataView = Nothing
    Try
        Dim objFolderContents As DirectoryInfo = New DirectoryInfo(_owner.GetSelectedDirectory())
        Dim objEntries() As FileSystemInfo = objFolderContents.GetFileSystemInfos()
        Dim objEntry As FileSystemInfo
        For Each objEntry In objEntries
            Dim dr As DataRow = dt.NewRow()
            dr("Name") = objEntry.Name
            If (objEntry.Attributes And FileAttributes.Directory) <> 0 Then
                dr("Size") = 0
                dr("IsFolder") = True
            Else
                dr("Size") = CType(objEntry, FileInfo).Length
                dr("IsFolder") = False
            End If
            dr("Modified") = objEntry.LastWriteTime
            dr("Created") = objEntry.CreationTime
            dr("Accessed") = objEntry.LastAccessTime
            dt.Rows.Add(dr)
        Next
        dv = New DataView(dt)
        dv.Sort = arguments.SortExpression
    Catch ex As Exception
        exc = ex
    End Try
    Dim statusEventArgs As New FolderContentsDataSourceStatusEventArgs(exc)
    OnSelected(statusEventArgs)
    If (exc IsNot Nothing And Not statusEventArgs.ExceptionHandled) Then
        Throw exc
    End If
    Return dv
End Function
Avatar billede neoman Novice
12. november 2007 - 21:01 #6
Det er denne her som gør et eller andet :
        Dim objFolderContents As DirectoryInfo = New DirectoryInfo(_owner.GetSelectedDirectory())
Avatar billede neoman Novice
12. november 2007 - 21:02 #7
hvordan ser GetSelectedDirectory ud ?
Avatar billede neoman Novice
12. november 2007 - 21:10 #8
ok har kigget på den - dette er mere end jeg har styr på lige nu, så vent på en mere kyndig person:)
Avatar billede strikerdk Novice
12. november 2007 - 21:37 #9
Ja det er en ordentlig mundfuld. Men hvis den kunne blive funktionel - vil den jo være et unikt værktøj til brug af Gridviewbrugere :-D Jeg har ikke set lignende eksempel andre steder.
Avatar billede strikerdk Novice
12. november 2007 - 22:42 #10
Mon ikke der er en der kan finde en løsning? :-D
Avatar billede strikerdk Novice
12. november 2007 - 23:55 #11
Neoman:::Såfremt du har en mappe som hedder Files i roden af dit site, så prøv med
*****Text="~/Files"*****
Du havde ret - i bund og grund var det fordi jeg ikke fik angivet den rigtige sti til mappen på serveren. Du har løst et problem der seriøst har givet mig kvaler!

Mange mange tak :-)

Smid venligst et svar
Avatar billede neoman Novice
13. november 2007 - 10:36 #12
:P
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



IT-JOB