Laden...

Experimente mit DropDownlist.SelectedValue: Wo liegt der (denk) Fehler?

Erstellt von schuppsl vor 14 Jahren Letzter Beitrag vor 14 Jahren 573 Views
S
schuppsl Themenstarter:in
789 Beiträge seit 2007
vor 14 Jahren
Experimente mit DropDownlist.SelectedValue: Wo liegt der (denk) Fehler?

Also Aufgrund meine Problems mit DDL (DropDownList) im anderen Thread, habe ich nun ein paar Experimente gemacht.
Entweder ich bin nun völlig Gaga oder ich habe was grundsätzliches nicht verstanden.
Es geht darum, wie in einer dynamisch erstellten DDL ein Wert selsktiert werden kann.

Dazu folgender Quelltext, de ich so in einer neuen ASP.NET Seite habe:



 protected void Page_PreRender(object sender, EventArgs e)
        {                       
                
                for (int i = 0, o = Int32.Parse(Session["page"].ToString()); i < 10); i++)
                {

                    ListItem item1 = new ListItem("1", "1");
                    ListItem item2 = new ListItem("2", "2");
                    ListItem item3 = new ListItem("3", "3");

                    DropDownList drop = new DropDownList();
                    drop.ID = "drop"+i;

                    drop.Items.Add(item1);
                    drop.Items.Add(item2);
                    drop.Items.Add(item3);
                   
                  
                

                    panErg.Controls.Add(drop);

                    o++;
                    if (o >= 3) o = 0;                  
                           
            }
        }


..........

 protected void Page_Load(object sender, EventArgs e)
        {


            Session["page"] = 0;
}

Zur hervorhebung, das hier ist der wichtige Teil:


  drop.Items[o].Selected = true;

Ich erstelle also in einer Schleife 10 DDL Boxen mit unterschiedlichen IDs.
Jeder DDL weise ich 3 Werte mit jeweils 1,2 und 3 zu.
Nacheinander werden dann alle DDL vorselektiert und zwar nacheinander mit 1,2,3,12,3,1,2,3 usw.

Das funktioniert und der Quellcode sieht nachher so aus:


 
<select name="drop0" id="drop0">
		<option selected="selected" value="1">1</option>
		<option value="2">2</option>
		<option value="3">3</option>
 
	</select><select name="drop1" id="drop1">
		<option value="1">1</option>
		<option selected="selected" value="2">2</option>
		<option value="3">3</option>
 
	</select><select name="drop2" id="drop2">
		<option value="1">1</option>
		<option value="2">2</option>
		<option selected="selected" value="3">3</option>
 
	</select><select name="drop3" id="drop3">
		<option selected="selected" value="1">1</option>
		<option value="2">2</option>
		<option value="3">3</option>
 
	</select><select name="drop4" id="drop4">
		<option value="1">1</option>
		<option selected="selected" value="2">2</option>
		<option value="3">3</option>
 
	</select><select name="drop5" id="drop5">
		<option value="1">1</option>
		<option value="2">2</option>
		<option selected="selected" value="3">3</option>
 
	</select><select name="drop6" id="drop6">
		<option selected="selected" value="1">1</option>
		<option value="2">2</option>
		<option value="3">3</option>
 
	</select><select name="drop7" id="drop7">
		<option value="1">1</option>
		<option selected="selected" value="2">2</option>
		<option value="3">3</option>
 
	</select><select name="drop8" id="drop8">
		<option value="1">1</option>
		<option value="2">2</option>
		<option selected="selected" value="3">3</option>
 
	</select><select name="drop9" id="drop9">
		<option selected="selected" value="1">1</option>
		<option value="2">2</option>
		<option value="3">3</option>
 
	</select>


Es werden also alle 10 DDL erstellt und korrekt vorselektiert. (selected=selected)

So, bis hierhin alles gut.

Jetzt ändere ich die Art der Vorselektierung und tausche :


drop.Items[o].Selected = true;

gegen:



 string ee = o.ToString();
 drop.SelectedValue = ee;

Ich wandle also "o" in einen String und mache so die Vorselektion.
Ergebnis ist eine falsche vorselektion der DDLs:



<select name="drop0" id="drop0">
		<option value="1">1</option>
		<option value="2">2</option>
		<option value="3">3</option>
 
	</select><select name="drop1" id="drop1">
		<option selected="selected" value="1">1</option>
		<option value="2">2</option>
		<option value="3">3</option>
 
	</select><select name="drop2" id="drop2">
		<option value="1">1</option>
		<option selected="selected" value="2">2</option>
		<option value="3">3</option>
 
	</select><select name="drop3" id="drop3">
		<option value="1">1</option>
		<option value="2">2</option>
		<option value="3">3</option>
 
	</select><select name="drop4" id="drop4">
		<option selected="selected" value="1">1</option>
		<option value="2">2</option>
		<option value="3">3</option>
 
	</select><select name="drop5" id="drop5">
		<option value="1">1</option>
		<option selected="selected" value="2">2</option>
		<option value="3">3</option>
 
	</select><select name="drop6" id="drop6">
		<option value="1">1</option>
		<option value="2">2</option>
		<option value="3">3</option>
 
	</select><select name="drop7" id="drop7">
		<option selected="selected" value="1">1</option>
		<option value="2">2</option>
		<option value="3">3</option>
 
	</select><select name="drop8" id="drop8">
		<option value="1">1</option>
		<option selected="selected" value="2">2</option>
		<option value="3">3</option>
 
	</select><select name="drop9" id="drop9">
		<option value="1">1</option>
		<option value="2">2</option>
		<option value="3">3</option>
 
	</select>



Es wird nicht nach Schema 1,2,3 vorselektiert.
Was ist hier falsch?

Warum funktioniert SelectedValue nicht korrekt?
Das habe ich natürlich auch angepasst:

Session["page"] = 0;
und
if (o > 3) o =1;

E
171 Beiträge seit 2004
vor 14 Jahren

Hi erstmal erstell bitte deine Controls in der

   
protected override void CreateChildControls()
{
this.Controls.Clear();
add myControl
}

und nicht im PreRender.
Wozu benutzt du eine Session ?
Wenn die Aktionenen auf ein und der selben seite bleiben nimm doch einen ViewState["ID"] = "";

Und teste das dann noch mal 😃

.elron

S
schuppsl Themenstarter:in
789 Beiträge seit 2007
vor 14 Jahren

Hi erstmal erstell bitte deine Controls in der

     
protected override void CreateChildControls()  
{  
this.Controls.Clear();  
add myControl  
}  
  

Warum?

E
171 Beiträge seit 2004
vor 14 Jahren