Anfängerfrage zu DropDownListe

03/02/2008 - 20:46 von martina gerling | Report spam
Hallo NG,

ich habe noch relativ wenig Erfahrung in ASP.NET und scheitere im
Moment an einfachen Lösung. Ich habe 3 DropDownListen. Beim Starten
der Webseite soll am Anfang aus einem Verzeichnis die
Unterverzeichnisse gelesen werden und in der ersten DropdownListe
angezeigt. Dabei soll der erste Wert ausgewàhlt werden.

Danach soll gleich in dem ausgewàhlten Verzeichnis nach den Dateinamen
geschaut werden, welche in der Form 01012008_xxx.log usw vorliegen.
01012008 ist das Datum. Aus diesem Datum möchte ich das Jahr auslesen
als Substring und in DropDownListe 2 anzeigen. Das klappt auch soweit.

Mir ist nun aufgefallen, das in der zweiten DropDownListe z.B. die
Jahre 2006, 2007 und 2008 angezeigt werden. Wàhle ich z. B. nun 2008
aus, dann springt das DropDownFeld sofort wieder auf 2006. Ich habe
alle Listen als AutoPostBack gesetzt.

Wie kann ich mein Problem lösen? Es wàre nicht schlecht, wenn es mit
AutoPostBack gehen würde.

Hier mal mein Quelltext:
protected void Page_Load(object sender, EventArgs e)
{
rootfolder = Server.MapPath("~");
rootstatfolder = Path.Combine(rootfolder, statfolder);

if (!IsPostBack)
Lade_Playernamen();
}

private void Lade_Playernamen()
{
ddlProjects.Items.Clear();
foreach(string di in Directory.GetDirectories(rootstatfolder))
{
ddlProjects.Items.Add(di.Substring(di.LastIndexOf(@"\")
+1));
}
if (ddlProjects.Items.Count > 0)
{
Lade_Jahre(ddlProjects.Items[0].Text.Trim());
}
}

protected void ddlProjects_SelectedIndexChanged(object sender,
EventArgs e)
{

Lade_Jahre(ddlProjects.Items[ddlProjects.SelectedIndex].Text.Trim());
}

private void Lade_Jahre(string playername)
{
DirectoryInfo di = new
DirectoryInfo(Path.Combine(rootstatfolder, playername + "\\logs"));
FileInfo[] fi = di.GetFiles("*.log",
SearchOption.TopDirectoryOnly);

ArrayList al=new ArrayList();

Regex regex = new Regex(@"^[0-9]{8}$");

ddlYears.Items.Clear();

foreach (FileInfo fin in fi)
{
if (regex.IsMatch(fin.Name.Substring(0, 8)))
{
if(!al.Contains(fin.Name.Substring(4,4)))
al.Add(fin.Name.Substring(4,4));
}
}

if (al.Count > 0)
{
al.Sort();
foreach (string year in al)
ddlYears.Items.Add(year);
}
}

Martina
 

Lesen sie die antworten

#1 Stefan Falz [MVP]
04/02/2008 - 09:38 | Warnen spam
Hallo Martina,

"martina gerling" schrieb:

Danach soll gleich in dem ausgewàhlten Verzeichnis nach den Dateinamen
geschaut werden, welche in der Form 01012008_xxx.log usw vorliegen.
01012008 ist das Datum. Aus diesem Datum möchte ich das Jahr auslesen
als Substring und in DropDownListe 2 anzeigen. Das klappt auch soweit.



nur so zum Verstàndnis. Du liest die Namen von ggfs. mehreren tausend
Dateien nur um dann zwei, drei, ... Jahreszahlen in ein Listenfeld zu
schreiben?

Mir ist nun aufgefallen, das in der zweiten DropDownListe z.B. die
Jahre 2006, 2007 und 2008 angezeigt werden. Wàhle ich z. B. nun 2008
aus, dann springt das DropDownFeld sofort wieder auf 2006.



Probier doch mal vorab bitte einfach eine statische DropDownList, also
einfach eine DDL im HTML Teil einfügen und drei Werte vorgeben. Wenn
die sich korrekt verhàlt, meld dich mal nochmal. (und überleg dir bitte
was neues bzgl. der Jahreszahlen, zur Not such die àlteste Datei und
zàhl dann die Jahre bis zum aktuellen Jahr hoch, alternativ kannst Du
die Jahre auch cachen oder irgendwo persistent ablegen)

Tschau, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

Ähnliche fragen