Zur Laufzeit erstellte Dropdownlisten

17/11/2008 - 09:46 von Selami Sulejmani | Report spam
Hallo Leute

In meiner Applikation versuche ich Dropdonwlisten zu erstellen.

So sollte es ablaufen:

Als erstes muss der User die gewünschten Kunden in eine CheckBoxList
auswàhlen. Wird ein Kunde ausgewàhlt, so wird darunter die von Ihm
bereitgestellte Struktur in eine Dropdownliste dargestellt (die
1-Ebene). Jede Kunden besitzt eine Struktur mit 3-Ebenen

Wird dann eine Ebene in der Dropdownliste ausgewàhlt so sollte die
Nàchste Ebene als Dropdownliste erscheinen. Und der letzte schritt ebenso.

So mein Problem liegt beim 2. Schritt.
den ersten schritt löse ich so:

protected void cbxKunden_SelectedIndexChanged
(object sender, EventArgs e)
{
for (int i = 0; i < cbxKunden.Items.Count; i++)
{
if (cbxKunden.Items[i].Selected == true)
{
int kudneID = Convert.ToInt32(cbxKunden.Items[i].Value);
hole1Ebene(kudneID);
}
}
}
private void hole1Ebene(int kundeID)
{
DropDownList myList = new DropDownList();

string selectEbene1 = "SELECT [1EbeneID], [1EbeneName], [KundeID] " +
"FROM [1Ebene] WHERE KundeID =" + kundeID;

SqlCommand sqlQuery = new SqlCommand(selectEbene1);
DataSet resultSet;
resultSet = RunQuery(sqlQuery);

myList.DataSource = resultSet;
myList.DataTextField = "1EbeneName";
myList.DataValueField = "1EbeneID";
myList.AutoPostBack = true;
myList.DataBind();
myList.SelectedIndexChanged += new
EventHandler(myList_SelectedIndexChanged);
pnlStruktur.Controls.Add(myList);
}

Das funktioniert auch Wunderbar. Ich habe zu jedem Kunde der ausgewàhlt
wird seine 1-Ebene Struktur.

Aber der Nàchste Schritt

protected void myList_SelectedIndexChanged(object sender, EventArgs e)
{
DropDownList ddList = (DropDownList)sender;
int eben1ID = Convert.ToInt32(ddList.SelectedValue);
hole2Ebene(eben1ID);
}

statt dass hier die 2-Ebene dargestellt wird, werden alle
Dropdownlisten entfernt.

hole2Ebene(ebeneID) ist ànlich wie die hole1Ebene(kundeID)

ich hab auch versucht die neuen DropDownlisten von der 2-Ebene in ein
anderen Pannel einzufügen, hat auch nichts funktioniert.

Ist etwa mein Eventhandler falsch?

Danke für Eure Unterstützung.

Beste Grüsse
Selami Sulejmani
 

Lesen sie die antworten

#1 Stefan Falz [MVP]
17/11/2008 - 11:23 | Warnen spam
Hallo Selami,

"Selami Sulejmani" schrieb:

private void hole1Ebene(int kundeID)
{
DropDownList myList = new DropDownList();



dieser Schritt sollte spàtestens bei Page_Load, eher früher durchgeführt
werden. Der Aufruf in SelectedIndexChanged ist definitiv zu spàt.

Zusàtzlich sollte das Control eine ID erhalten, sonst weiß die Anwendung
spàter gar nicht, welches Control die Postbackdaten erhalten soll und damit
kann auch nicht auf Postbackevents reagiert werden.

Ich mach das meist so, dass die Controls deklarativ eingebunden werden und
falls bspw. die zweite DDL nicht angezeigt werden soll, wird diese per

<Control>.Visible = false;

versteckt. Das hat für dich hier den Vorteil, dass Du die um den "richtigen"
Zeitpunkt für die Erstellung des Controls keine Gedanken machen musst.

<asp:DropDownList ID="List1" ... />
<asp:DropDownList ID="List2" ... Visible="false" />

List1_SelectedIndexChanged( ... )
{
...
List2.Visible = true;
}

List2_SelectedIndexChanged( ... )
{
...
}

(So in etwa, ist nur schnell hingeschrieben).

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