tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
12
ZUGRIFFE
1723
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Scouty Scouty ist offline Mitglied Bronze
    Registriert seit
    Mar 2005
    Beiträge
    25
    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.

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

  2. #2
    drvj drvj ist offline Mitglied Silber
    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:
    Code :
    1
    
    DropDownList.Items.Add("Bitte wählen ...")
    aufrufen und danach die Daten des DataTables hinzufügen.

    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
     

  3. #3
    Scouty Scouty ist offline Mitglied Bronze
    Registriert seit
    Mar 2005
    Beiträge
    25
    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
     

  4. #4
    Scouty Scouty ist offline Mitglied Bronze
    Registriert seit
    Mar 2005
    Beiträge
    25
    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
     

  5. #5
    drvj drvj ist offline Mitglied Silber
    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
     

  6. #6
    Scouty Scouty ist offline Mitglied Bronze
    Registriert seit
    Mar 2005
    Beiträge
    25
    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
     

  7. #7
    drvj drvj ist offline Mitglied Silber
    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
     

  8. #8
    Scouty Scouty ist offline Mitglied Bronze
    Registriert seit
    Mar 2005
    Beiträge
    25
    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
     

  9. #9
    drvj drvj ist offline Mitglied Silber
    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
     

  10. #10
    Scouty Scouty ist offline Mitglied Bronze
    Registriert seit
    Mar 2005
    Beiträge
    25
    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
     

  11. #11
    drvj drvj ist offline Mitglied Silber
    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
     

  12. #12
    Scouty Scouty ist offline Mitglied Bronze
    Registriert seit
    Mar 2005
    Beiträge
    25
    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
     

  13. #13
    Scouty Scouty ist offline Mitglied Bronze
    Registriert seit
    Mar 2005
    Beiträge
    25
    Hallo,

    hat dazu niemand weiter eine idee? Ich verzweile hier gerade, weil ich da ewig nicht weiterkomme.

    Gruß Scouty
     

Ähnliche Themen

  1. DropDownListen befüllen?!
    Von SebiASP im Forum .NET Web und Kommunikation
    Antworten: 3
    Letzter Beitrag: 10.07.06, 22:21
  2. DropDownListen befüllen!
    Von SebiASP im Forum ASP
    Antworten: 1
    Letzter Beitrag: 07.07.06, 20:59
  3. Dynamische DropDownListen im DataGrid
    Von Andreas Witt im Forum .NET Archiv
    Antworten: 0
    Letzter Beitrag: 04.05.05, 14:39
  4. 3 dynamische Dropdownlisten
    Von klausjaede im Forum PHP
    Antworten: 5
    Letzter Beitrag: 20.07.04, 10:30
  5. Dropdownlisten variable mit daten befüllen...
    Von Fenriswolf im Forum .NET Archiv
    Antworten: 0
    Letzter Beitrag: 10.12.03, 21:20