Det ser inte ut dom det går att göra så i dokumentationen.
Men man vet ju aldrig :)
Annars måste du hämta alla, iterera dem och bara visa de med rätt extention.
private void BindData()
{
StringCollection sc = new StringCollection();
DirectoryInfo di = new DirectoryInfo([i]dinsökväg[/i]);
FileInfo[] fi = di.GetFiles();
foreach(FileInfo f in fi)
{
if(!f.Extension.Equals(".aspx") && !f.Extension.Equals(".resx"))
{
sc.Add(f.Name);
}
}
dgFiles.DataSource = sc;
dgFiles.DataBind();
}
sub BindData()
dim sc as new StringCollection()
dim di as new DirectoryInfo([i]dinsökväg[/i])
dim fi[] as FileInfo = di.GetFiles()
for each f as FileInfo in fi
if not f.Extension.Equals(".aspx") and not f.Extension.Equals(".resx") then
sc.Add(f.Name)
end if
next
dgFiles.DataSource = sc
dgFiles.DataBind()
end sub
Icket att jag får till det. Med koden ovan kom jag så långt till att den visade ingenting???
Problemet är att min default.aspx fil visas.
Ett sätt är att lägga den utanför mappen och ha en exakt sökväg som D:\webbmapp\mapp, men av någon anledning så får då fel länk i min HyperLinkColumn. Men det funkar att radera.
DataNavigateUrlField hänvisar ju till mappen där default.aspx finns och inte där mina bilder är.
Kan jag komma runt detta på något sätt?
Nedan är den fungerande koden som listar alla .jpg bilder
<%@ Page Language="VB" debug="True" %>
<%@ Import Namespace="System.IO" %>
<script language="VB" runat="server">
Dim dirInfo as New DirectoryInfo(Server.MapPath(""))
Sub Page_Load(sender as Object, e as EventArgs)
fileList.DataSource = dirInfo.GetFiles("*.jpg")
fileList.DataBind()
End Sub
Sub fileList_ItemDataBound(sender as Object, e as DataGridItemEventArgs)
If e.Item.ItemType <> ListItemType.Header AND e.Item.ItemType <> ListItemType.Footer then
Dim deleteButton as LinkButton = e.Item.Cells(0).Controls(0)
deleteButton.Attributes("onclick") = "javascript:return " & "confirm('Är du säker att du vill radera " & DataBinder.Eval(e.Item.DataItem, "Name") & "?')"
End If
End Sub
Sub DeleteFile(sender as Object, e as DataGridCommandEventArgs)
Dim fileName as String = fileList.DataKeys(e.Item.ItemIndex)
File.Delete(fileName)
fileList.DataSource = dirInfo.GetFiles("*")
fileList.DataBind()
End Sub
</script>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Untitled Document</title>
</head>
<body>
<form runat="server">
<table width="590" border="0" align="center" cellpadding="2" cellspacing="0">
<tr>
<td>
<ASP:DataGrid id="fileList" runat="server"
Width="100%"
GridLines="Horizontal"
BorderColor="#829ABF"
BorderStyle="Dotted"
BorderWidth="1"
ShowHeader="False"
ShowFooter="False"
CellPadding=4
CellSpacing="0"
DataKeyField="FullName"
OnItemDataBound="fileList_ItemDataBound"
OnDeleteCommand="DeleteFile"
AutoGenerateColumns="false">
<AlternatingItemStyle backcolor="#F2F6F9"></AlternatingItemStyle>
<Columns>
<asp:ButtonColumn Text="Delete" ButtonType="LinkButton" CommandName="Delete" />
<asp:HyperLinkColumn DataNavigateUrlField="Name" Target="blank" DataTextField="Name" HeaderText="File Name" />
<asp:BoundColumn DataField="Length" HeaderText="File Size" ItemStyle-HorizontalAlign="Right" DataFormatString="{0:#,### bytes}" />
</Columns>
</ASP:DataGrid>
</td>
</tr>
</table>
<p> </p>
</form>
</body>
</html>
Jag ändrade dina Page_Load och fileList_ItemDataBound till följande och då fungerade det fint.
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
fileList.DataSource = dirInfo.GetFiles("*.*")
fileList.DataBind()
End Sub
Sub fileList_ItemDataBound(ByVal sender As Object, ByVal e As DataGridItemEventArgs)
If e.Item.ItemType <> ListItemType.Header And e.Item.ItemType <> ListItemType.Footer Then
If InStr(DataBinder.Eval(e.Item.DataItem, "Name"), ".jpeg") Or InStr(DataBinder.Eval(e.Item.DataItem, "Name"), ".jpg") Or InStr(DataBinder.Eval(e.Item.DataItem, "Name"), ".gif") Then
Dim deleteButton As LinkButton = e.Item.Cells(0).Controls(0)
deleteButton.Attributes("onclick") = "javascript:return " & "confirm('Är du säker att du vill radera " & DataBinder.Eval(e.Item.DataItem, "Name") & "?');"
Else
e.Item.Visible = False
End If
End If
End Sub
Om det är nån snygg lösning vet jag väl inte men som sagt, det funkar.
Om jag skulle göra det själv så skulle jag nog bygga lite klasser som sköter logiken. ;)