webForumDet fria alternativet

lista filer

.NETur .NET

11 svar · 461 visningar · startad av Arne

ArneMedlem sedan maj 2000267 inlägg
Frågan#1

Har en DataGrid där jag listar jpg bilder i en mapp.

fileList.DataSource = dirInfo.GetFiles("*.jpg")
fileList.DataBind()

Denna kod listar alla jpg filer i mappen, men hur gör jag om jag vill filtrera flera filhändelser. Visa bara .gif, .jpg och .htm filer i mappen?

Eller om jag kan filtrera visa ej dessa filer med filhändelsen.....

renholmMedlem sedan apr. 20012 266 inlägg
#2

Normallt brukar man separera med ';' testa det.

ArneMedlem sedan maj 2000267 inlägg
#3

fungerar ej

Nix, funkar inte. Tror jag provat alla sätt nu, men säkert finns det ett kvar. Några fler tips?

JonMedlem sedan juli 20011 304 inlägg
#4

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.

ArneMedlem sedan maj 2000267 inlägg
#5

Hmmmmm

Annars måste du hämta alla, iterera dem och bara visa de med rätt extention.

Hur menar du? Visa /förklara för en nybörjare hur jag väljer att inte visa t.ex .aspx filer i datagriden?

DinoMedlem sedan sep. 20011 914 inlägg
#6
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

red// vb version tillagd

ArneMedlem sedan maj 2000267 inlägg
#7

Ursäkta mig:-)

Hmmm. Ursäkta mig.........
Hur kan det tänkas se ut i VB?

JonMedlem sedan juli 20011 304 inlägg
#8

// Redigerat, såg inte redigeringen (det där blev krångligt) ;)

ArneMedlem sedan maj 2000267 inlägg
#9

I helskottefyr....

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>&nbsp;</p>
</form>
</body>
</html>
PDahlens avatarPDahlenMedlem sedan apr. 2004778 inlägg
#10

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. ;)

drunken_masterMedlem sedan feb. 200435 inlägg
#11

Här får du ett till alternativ.
Gör om if-satsen som PDahlen föreslog med hjälp av en strängarray som håller de filändelser du är intresserad av.

Vad du gillar bäst är upp till dig :-)

C#


private string[] ändelser = new string[]{".gif",".jpg", ".tif",".tiff",".ai",".pdf"}; 

//I fileList_ItemDataBound
int index = Array.IndexOf(this.ändelser, DataBinder.Eval(e.Item.DataItem, "Name").ToString().ToLower());
if(index > -1)
//ändelsen hittad, gör någonting
ArneMedlem sedan maj 2000267 inlägg
#12

Hyvens alla.....

Tack för hjälpen, nu fungerar det förträffligt. Hade nog fått klura länge för att få till detta..........

138 ms totalt · 3 externa anrop · v20260731065814-full.58439ac5
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
135 ms — hämta tråd, inlägg och bilagor (db)