ERLEDIGT
NEIN
NEIN
ANTWORTEN
12
12
ZUGRIFFE
1723
1723
EMPFEHLEN
-
Hallo,
ich habe in meiner asp.net seite mehrere Dropdownmenüs. Die Inhalte holt er sich aus einer Access Datenbank. Das ganze soll am Ende so aussehen, daß beim ersten laden noch alle, bis auf das erste drop down deaktiviert sind. Sobald man aber im ersten dropdown was ausgewählt hat, wird das zweite dropdown aktiviert und man kann da wieder was auswählen.
Problem 1: Sobald man im dropdown1 was ausgewählt hat, aktiviert sich nicht nur der zweite sondern auch gleich alle anderen dropdownlisten. Hier ein kurzer ausschnitt aus dem code. Was/ wie muss ich das verändern, daß das dann auch mit den anderen drop downs klappt. Es sind insgesamt 5 dropdownlisten.
Problem 2: Wie bekomme ich bei jeder dropdownliste eine art dummy eintrag? Zum Beispiel "Bitte auswählen". Da der Inhalt der listen aus einer Datenbank geholt wird, hat das mit listitems (<asp:ListItem value="">element1</asp:ListItem>) nicht geklappt.Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64
... ' Projekte einlesen Dim sql As String sql = "SELECT * FROM tblProjekt" cmd.CommandText = sql Dim myDS As New DataSet() myAdapter.Fill (myDS, "Projekt") Projekt.DataSource = myDS.Tables("Projekt") Projekt.DataTextField = "TxtProjekt" Projekt.DataValueField = "IdProjekt" ' Arbeitspaket einlesen sql = "SELECT * FROM tblArbeitspaket" cmd.CommandText = sql myAdapter.Fill (myDS, "Arbeitspaket") Arbeitspaket.DataSource = myDS.Tables("Arbeitspaket") Arbeitspaket.DataTextField = "TxtArbeitspaket" Arbeitspaket.DataValueField = "IdArbeitspaket" ' Jahr einlesen sql = "SELECT tblPerioden.NumJahr FROM tblPerioden GROUP BY tblPerioden.NumJahr;" cmd.CommandText = sql myAdapter.Fill (myDS, "Jahr") Jahr.DataSource = myDS.Tables("Jahr") Jahr.DataTextField = "NumJahr" Jahr.DataValueField = "NumJahr" ' Monat einlesen sql = "SELECT tblPeriodenStruktur.NumMonat FROM tblPeriodenStruktur;" cmd.CommandText = sql myAdapter.Fill (myDS, "Monat") Monat.DataSource = myDS.Tables("Monat") Monat.DataTextField = "NumMonat" Monat.DataValueField = "NumMonat" ' Tag einlesen sql = "SELECT tblTage.numTag FROM tblTage;" cmd.CommandText = sql myAdapter.Fill (myDS, "Tag") Tag.DataSource = myDS.Tables("Tag") Tag.DataTextField = "NumTag" Tag.DataValueField = "numTag" If Not IsNothing(Projekt.SelectedItem) arbeitspaket.enabled = true End If If Not IsNothing(Arbeitspaket.SelectedItem) Jahr.enabled = true End If If Not IsNothing(Jahr.SelectedItem) Monat.enabled = true End If If Not IsNothing(Monat.SelectedItem) Tag.enabled = true End If If Not IsNothing(Tag.SelectedItem) End If ...
Ich brauche so einen Dummy Eintrag, weil sonst nichts passiert, wenn man den ersten Eintrag in der Dropdownliste auswählt, auch wenn vorher schon ein anderer ausgewählt wurde. Er springt auch immer wieder zum ersten eintrag in der Liste zurück. Kann man das auch noch ändern? Wenn ja, womit?
Ich hoffe, ich hab mein Problem verständlich erklärt und hoffe auf schnelle Hilfe.
Herzliche Grüße Scouty
-
18.06.05 13:36 #2
- Registriert seit
- Dec 2003
- Ort
- Oberursel bei Frankfurt a.M.
- Beiträge
- 69
Hallo,
Problem 2:
Du könntest, anstatt der DropDownList den DataTable per DataSource zu übergeben, per Schleife jede DataRow des DataTablesdurchlaufen und so mit Hilfe der Funktion DropDownList.Items.Add() die selektierbaren Items hinzufügen. Somit kannst du zu anfangs:
aufrufen und danach die Daten des DataTables hinzufügen.Code :1
DropDownList.Items.Add("Bitte wählen ...")
Problem 1:
Wenn du es wie oben beschrieben realisierst, kannst du folgenden Code nehmen, um die Aktivierunge der einzelnen DropDownLists zu erreichen.
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
if (Monat.SelectedItem ==0) { Tag.Enabled = false; } else { Tag.Enabled = true; } if (Jahr.SelectedItem == 0) { Monat.Enabled = false; Tag.Enabled = false; } else { Monat.Enabled = false; } if (Arbeitspacket.SelectedItem == 0) { Jahr.Enabled = false; Monat.Enabled = false; Tag.Enabled = false; } else { Jahr.Enabled = true; } if (Projekt.SelectedItem == 0) { arbeitspaket.Enabled = false; Jahr.Enabled = false; Monat.Enabled = false; Tag.Enabled = false; } else { arbeitspaket.Enabled = true; }
Anmerkung: Ist C# Code, jedoch dürfte es kein Problem sein es in VB umzuwandeln.
Ich hoffe, ich konnte helfen.
Mfg,
Jens
-
Hallo Jens,
entschuldige, wenn ich erst heute Antworte, ich hatte die letzen drei Tage frei.
zu Problem 2:
gibt es noch eine andere möglichkeit, daß ich den code, so, wie er momentan ist, bestehen lassen kann und trotzdem eine "Bitte wählen..." Zeile bekomme? Dazu gesagt, ich bin noch Anfängerin in sachen asp.net und ahbe mir bisheriges auch nur aus vielen Beispielen abgeguckt und kopiert. Deswegen fällts mir schwer, da irgendwie den ganzen Code umzuschreiben.
Den Code von C# in VB umzuwnadeln, damit denke ich habe ich keine Probleme, wenn er denn passen würde.
Viele Grüße Judith
-
Hi,
mittlerweile habe ich das schonmal so hinbekommen, daß ich jedes Dropdown erst nacheinander auswählen kann. Somit ist Problem 1 gelöst.
siehe Code:
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77
... ' Projekte einlesen Dim sql As String sql = "SELECT tblMitarbeiter.Login, tblProjekt.TxtProjekt, tblProjekt.IDProjekt FROM tblMitarbeiter INNER JOIN ((tblProjekt INNER JOIN tblArbeitspaket ON tblProjekt.IDProjekt = tblArbeitspaket.IDProjekt) INNER JOIN tblTeamMembers ON tblArbeitspaket.IDArbeitspaket = tblTeamMembers.IDArbeitspaket) ON tblMitarbeiter.IDMitarbeiter = tblTeamMembers.IDMitarbeiter WHERE Login='" & Cstr(session("Username")) & "' GROUP BY tblMitarbeiter.Login, tblProjekt.TxtProjekt, tblProjekt.IDProjekt;" cmd.CommandText = sql Dim myDS As New DataSet() myAdapter.Fill (myDS, "Projekt") Projekt.DataSource = myDS.Tables("Projekt") Projekt.DataTextField = "TxtProjekt" Projekt.DataValueField = "IdProjekt" If Not IsNothing(Projekt.SelectedItem) arbeitspaket.enabled = true label.text = "... " & Projekt.SelectedItem.Text & "." ' Arbeitspaket einlesen sql = "SELECT * FROM tblArbeitspaket WHERE ((tblArbeitspaket.IDProjekt)=" & Projekt.SelectedItem.value & ")" cmd.CommandText = sql myAdapter.Fill (myDS, "Arbeitspaket") Arbeitspaket.DataSource = myDS.Tables("Arbeitspaket") Arbeitspaket.DataTextField = "TxtArbeitspaket" Arbeitspaket.DataValueField = "IdArbeitspaket" Else arbeitspaket.enabled = false Jahr.enabled = false Monat.enabled = false Tag.enabled = false End If If Not IsNothing(Arbeitspaket.SelectedItem) Jahr.enabled = true ' Jahr einlesen sql = "SELECT tblPerioden.NumJahr FROM tblPerioden GROUP BY tblPerioden.NumJahr;" cmd.CommandText = sql myAdapter.Fill (myDS, "Jahr") Jahr.DataSource = myDS.Tables("Jahr") Jahr.DataTextField = "NumJahr" Jahr.DataValueField = "NumJahr" Else Jahr.enabled = false Monat.enabled = false Tag.enabled = false End If If Not IsNothing(Jahr.SelectedItem) Monat.enabled = true ' Monat einlesen sql = "SELECT tblPeriodenStruktur.NumMonat FROM tblPeriodenStruktur;" cmd.CommandText = sql myAdapter.Fill (myDS, "Monat") Monat.DataSource = myDS.Tables("Monat") Monat.DataTextField = "NumMonat" Monat.DataValueField = "NumMonat" Else Monat.enabled = false Tag.enabled = false End If If Not IsNothing(Monat.SelectedItem) Tag.enabled = true ' Tag einlesen sql = "SELECT tblTage.numTag FROM tblTage;" cmd.CommandText = sql myAdapter.Fill (myDS, "Tag") Tag.DataSource = myDS.Tables("Tag") Tag.DataTextField = "NumTag" Tag.DataValueField = "numTag" Else Tag.enabled = false End If ...
Ist dann nur noch Problem 2 offen.
Es muss doch irgendwas geben, daß man zusätzlich zu den Einträgen aus einer Datenbank, auch noch eine "statische" Zeile in die Dropdownlist einfügen kann. Die nichts anderes zu tun hat, als zu sagen: "Bitte wählen..:"
Gehts das nicht auch so, daß ich den Code so, wie er jetzt ist, nicht groß verändern muss, sondern ledigleich eine Codezeile zusätzlich reinkopieren muss.
Schöne Grüße und Danke schonmal
Judith
-
21.06.05 18:28 #5
- Registriert seit
- Dec 2003
- Ort
- Oberursel bei Frankfurt a.M.
- Beiträge
- 69
Hallo,
nachdem ich mir nochmal die Class Members der Klasse RowCollection angesehen habe, kann man dein Problem auch lösen, indem man nur Code zu deinem Vorhandenem hinzufügt.
Du fügst nun zwischen den jeweiligen Codezeilen:
myAdapter.Fill (myDS, "xxx")
xxx.DataSource = myDS.Tables("xxx")
den folgenden Code:
Code :1 2 3
Dim newRow as DataRow = myDS.Tables("xxx").NewRow() newRow(0) = "Bitte auswählen ..." myDS.Tables("xxx").Rows.InsertAt(newRow,0)
Anmerkung: xxx stellt einen Platzhalter dar.
Dadurch wird an den Anfang deiner Datetabelle eine Zeile hinzugefügt mit dem Inhalt "Bitte wählen".
Ich hoffe, diese Lösung dürfte nun funktionieren.
mfg,
Jens
-
Hallo,
die Lösung funktioniert leider nicht ganz.
Fürge ich die drei Zeilen ein und ändere jeweils die Platzhalter bekomme ich erstmal folgende Meldung. Die Variable "newRow" verbirgt eine Variable in einem einschließenden Block.
Dementsprechend habe ich dann die fettgedrucken stellen jeweils geändert in 1, 2, 3 und 4 (weil 5 DropDowns)
Code :1 2 3
Dim newRow[B]1[/B] as DataRow = myDS.Tables("xxx").NewRow() newRow[B]1[/B](0) = "Bitte auswählen ..." myDS.Tables("xxx").Rows.InsertAt(newRow[B]1[/B],0)
Als Ergebnis habe ich zwar wieder meine Dropdowns und an der Stelle wo "Bitte wählen..." stehen soll ist nur ein leeres Feld. Das ist ja nicht ganz so schlimm, wenn da nichts steht, aber wähle ich dann aus dem ersten Dropdown ein Projekt aus, bekomme ich folgende lange Meldung:
System.FormatException: Die Eingabezeichenfolge hat das falsche Format. at System.Number.ParseInt32(String s, NumberStyles style, NumberFormatInfo info) at System.String.System.IConvertible.ToInt32(IFormatProvider provider) at System.Convert.ToInt32(Object value) at System.Data.Common.Int32Storage.Set(Int32 record, Object value) at System.Data.DataColumn.set_Item(Int32 record, Object value)<Bitte auswählen ...> konnte nicht in der IDArbeitspaket-Spalte gespeichert werden. Erwarteter Typ: Int32.
Beschreibung: Beim Ausführen der aktuellen Webanforderung ist ein unverarbeiteter Fehler aufgetreten. Überprüfen Sie die Stapelüberwachung, um weitere Informationen über diesen Fehler anzuzeigen und festzustellen, wo der Fehler im Code verursacht wurde.
Ausnahmedetails: System.ArgumentException: System.FormatException: Die Eingabezeichenfolge hat das falsche Format. at System.Number.ParseInt32(String s, NumberStyles style, NumberFormatInfo info) at System.String.System.IConvertible.ToInt32(IFormatProvider provider) at System.Convert.ToInt32(Object value) at System.Data.Common.Int32Storage.Set(Int32 record, Object value) at System.Data.DataColumn.set_Item(Int32 record, Object value)<Bitte auswählen ...> konnte nicht in der IDArbeitspaket-Spalte gespeichert werden. Erwarteter Typ: Int32.
Quellfehler:
Zeile 50: myAdapter.Fill (myDS, "Arbeitspaket")
Zeile 51: Dim newRow1 as DataRow = myDS.Tables("Arbeitspaket").NewRow()
Zeile 52: newRow1(0) = "Bitte auswählen ..."
Zeile 53: myDS.Tables("Arbeitspaket").Rows.InsertAt(newRow1,0)
Zeile 54: Arbeitspaket.DataSource = myDS.Tables("Arbeitspaket")
Was und warum will er in die Spalte der einen Tabelle schreiben?
Ich hoffe, ihr könnt mir noch einmal helfen.
Viele Grüße Judith
-
23.06.05 12:57 #7
- Registriert seit
- Dec 2003
- Ort
- Oberursel bei Frankfurt a.M.
- Beiträge
- 69
Hallo,
anhand der Fehlermeldungen würde ich sagen, dass in deiner Arbeitspaket Tabelle lediglich Zahlenwerte gespeichert sind. Daher scheint es nicht möglich einen String darin zu speichern.
Von daher müsstest du es anders lösen. Einen anderen Weg nannte ich bereits, indem du mit Hilfe einer Schleife die Tabelle durchläufst und so die DropDownListe füllst. So kannst du bevor du die Schleife durchläufst der DropDownList ein Element "Bitte wählen ..." hinzufügen.
mfg,
Jens
-
Hallo,
aber warum soll/will er denn einen String in die Tabelle speichern? Das will ich doch gar nicht. Hmmm...
Kannst du mir das mit der Schleife nochmal genauer erklären? An welcher Stelle ich was einfügen muss usw.
Danke dir
Viele Grüße Judith
-
23.06.05 21:43 #9
- Registriert seit
- Dec 2003
- Ort
- Oberursel bei Frankfurt a.M.
- Beiträge
- 69
Hallo,
ersetze jeweils die Zeile
Code :1
xxx.DataSource = myDS.Tables("xxx")
durch
Code :1 2 3 4 5 6
xxx.Items.Add("Bitte auswählen ...") Dim newRow as DataRow For Each myRow in myDS.Tables("xxx") xxx.Items.Add(myRow[0].ToString()) Next myRow
mfg
Jens
-
Hallo Jens,
zuerst kam die Meldung, daß die lokale Variable "newRow" bereits im aktuellen Block deklariert ist. Habe Dim newRow as DataRow dann auskommentiert.
Dann kam die Meldung, daß der Name "myRow" nicht deklariert wurde. Habe dann einfach die Zeile, die ich eben auskommentiert habe, wieder einkommentiert und das new durch my ersetzt.
Danach kam dann folgende Meldung und ab da an wußt ich dann auch nicht mehr weiter.
Kompilierungsfehler
Beschreibung: Beim Kompilieren einer Resource, die für diese Anforderung erforderlich ist, ist ein Fehler aufgetreten. Überprüfen Sie folgende Fehlerinformationen und ändern Sie die Quelldatei entsprechend.
Compilerfehlermeldung: BC32023: Der Ausdruck hat den Typ "System.Data.DataTable", der kein Auflistungstyp ist.
Quellfehler:
Zeile 40: Projekt.Items.Add("Bitte auswählen ...")
Zeile 41: Dim myRow as DataRow
Zeile 42: For Each myRow in myDS.Tables("Projekt")
Zeile 43: Projekt.Items.Add(myRow[0].ToString())
Zeile 44: Next myRow
Ich hoffe ihr seid nicht so verzweifelt wie ich und könnt mir immernoch helfen.
Schöne Grüße Judith
-
24.06.05 11:45 #11
- Registriert seit
- Dec 2003
- Ort
- Oberursel bei Frankfurt a.M.
- Beiträge
- 69
Hallo,
sry mein Fehler. Die rot-markierte Zeile müsste so heißen:
For Each myRow in myDS.Tables("Projekt").Rows
mfg Jens
-
Hallo,
Hab ich geändert und dann kam folgende Meldung:
Kompilierungsfehler
Beschreibung: Beim Kompilieren einer Resource, die für diese Anforderung erforderlich ist, ist ein Fehler aufgetreten. Überprüfen Sie folgende Fehlerinformationen und ändern Sie die Quelldatei entsprechend.
Compilerfehlermeldung: BC30518: Die Überlandungsauflösung ist fehlgeschlagen,da keine zugreifbare "Add" mit diesen Argumenten aufgerufen werden kann:
Quellfehler:
Zeile 41: Dim myRow as DataRow
Zeile 42: For Each myRow in myDS.Tables("Projekt").Rows
Zeile 43: Projekt.Items.Add(myRow[0].ToString())
Zeile 44: Next myRow
Zeile 45: Projekt.DataTextField = "TxtProjekt"
Schöne Grüße Judith
-
Hallo,
hat dazu niemand weiter eine idee? Ich verzweile hier gerade, weil ich da ewig nicht weiterkomme.
Gruß Scouty
Ähnliche Themen
-
DropDownListen befüllen?!
Von SebiASP im Forum .NET Web und KommunikationAntworten: 3Letzter Beitrag: 10.07.06, 22:21 -
DropDownListen befüllen!
Von SebiASP im Forum ASPAntworten: 1Letzter Beitrag: 07.07.06, 20:59 -
Dynamische DropDownListen im DataGrid
Von Andreas Witt im Forum .NET ArchivAntworten: 0Letzter Beitrag: 04.05.05, 14:39 -
3 dynamische Dropdownlisten
Von klausjaede im Forum PHPAntworten: 5Letzter Beitrag: 20.07.04, 10:30 -
Dropdownlisten variable mit daten befüllen...
Von Fenriswolf im Forum .NET ArchivAntworten: 0Letzter Beitrag: 10.12.03, 21:20





Zitieren
Login





