Avatar billede fileto Seniormester
28. marts 2004 - 20:07 Der er 5 kommentarer og
1 løsning

Hvad gør man nemmest hvis man har 5 ens dynamisk kontroller?

Jeg er ved at lave 5 Dropdownlister som skal adderes til en form dynamisk med placeholder.
Jeg vil gerne høre om det er muligt at lave et array med typen DropDownlist eller moske en collection, får så kan jeg jo bare lave en while lykke og itterere igennem arrayet istedet for det jeg har lavet nedenfor.

# code start

if (numberOfFeatures > 0)
{
DropDownList lstFeatureList1 = new DropDownList();
lstFeatureList1.Height = 20;
lstFeatureList1.Width = 200;
lstFeatureList1.Style.Add("top", "230px");
lstFeatureList1.Style.Add("left", "130px");
lstFeatureList1.Style.Add("position", "absolute");
lstFeatureList1.DataSource = features;
lstFeatureList1.DataBind();
plhFeatureHolder.Controls.Add(lstFeatureList1);
}
if (numberOfFeatures > 1)
{
DropDownList lstFeatureList2 = new DropDownList();
lstFeatureList2.Height = 20;
lstFeatureList2.Width = 200;
lstFeatureList2.Style.Add("top", "260px");
lstFeatureList2.Style.Add("left", "130px");
lstFeatureList2.Style.Add("position", "absolute");
lstFeatureList2.DataSource = features;
lstFeatureList2.DataBind();
plhFeatureHolder.Controls.Add(lstFeatureList2);
}
if (numberOfFeatures > 2)
{
DropDownList lstFeatureList3 = new DropDownList();
lstFeatureList3.Height = 20;
lstFeatureList3.Width = 200;
lstFeatureList3.Style.Add("top", "290px");
lstFeatureList3.Style.Add("left", "130px");
lstFeatureList3.Style.Add("position", "absolute");
lstFeatureList3.DataSource = features;
lstFeatureList3.DataBind();
plhFeatureHolder.Controls.Add(lstFeatureList3);
}
if (numberOfFeatures > 3)
{
DropDownList lstFeatureList4 = new DropDownList();
lstFeatureList4.Height = 20;
lstFeatureList4.Width = 200;
lstFeatureList4.Style.Add("top", "320px");
lstFeatureList4.Style.Add("left", "130px");
lstFeatureList4.Style.Add("position", "absolute");
lstFeatureList4.DataSource = features;
lstFeatureList4.DataBind();
plhFeatureHolder.Controls.Add(lstFeatureList4);
}
if (numberOfFeatures > 4)
{
DropDownList lstFeatureList5 = new DropDownList();
lstFeatureList5.Height = 20;
lstFeatureList5.Width = 200;
lstFeatureList5.Style.Add("top", "350px");
lstFeatureList5.Style.Add("left", "130px");
lstFeatureList5.Style.Add("position", "absolute");
lstFeatureList5.DataSource = features;
lstFeatureList5.DataBind();
plhFeatureHolder.Controls.Add(lstFeatureList5);
}

# code slut

Jeg har fået foreslået følgende :

# code start
for (int i=0; i<numberOfFeatures; i++)
{
DropDownList lstFeatureList = new DropDownList();
lstFeatureList1.Height = 20;
lstFeatureList1.Width = 200;
lstFeatureList1.Style.Add("top", (230+i*30).ToString() + "px");
lstFeatureList1.Style.Add("left", "130px");
lstFeatureList1.Style.Add("position", "absolute");
lstFeatureList1.DataSource = features;
lstFeatureList1.DataBind();
plhFeatureHolder.Controls.Add(lstFeatureList);
}
# code slut

Og det er også nogen lunde det jeg vil lave men jeg har brug
for en måde hvorpå jeg kan skelne mellem de 5 kontroller
og i ovenstående eksempel vil navnet på alle kontroller være ens.

Hvis man nu kunne arrangere controllerne i et array eller en collection så kunne man jo ittere og bruge et index til at få fat i den ønskede kontrol.

Kan det gøres smartere end ovenstående?
Avatar billede fileto Seniormester
29. marts 2004 - 00:36 #1
Det jeg vil er at arrangere mine controller i feks en collection
og så blive istand til at tilgå dem med et index.

Feksempel noget lignende som vist nedenfor :

#code start

DropDownList lstFeatureList0 = new DropDownList();
DropDownList lstFeatureList1 = new DropDownList();
DropDownList lstFeatureList2 = new DropDownList();
DropDownList lstFeatureList3 = new DropDownList();
DropDownList lstFeatureList4 = new DropDownList();

ArrayList lstFeatureList = new ArrayList();
lstFeatureList.Add (lstFeatureList0);
lstFeatureList.Add (lstFeatureList1);
lstFeatureList.Add (lstFeatureList2);
lstFeatureList.Add (lstFeatureList3);
lstFeatureList.Add (lstFeatureList4);

for (int i=0; i<numberOfFeatures; i++)
{
    lstFeatureList[i].Height = 20;
    lstFeatureList[i].Width = 200;
    lstFeatureList[i].Style.Add("top", "" + baseTop + "px");
    lstFeatureList[i].Style.Add("left", "" + FeaturelistCol + "px");
    lstFeatureList[i].Style.Add("position", "absolute");
    lstFeatureList[i].DataSource = selectedFeatures;
    lstFeatureList[i].DataBind();
    lstFeatureList[i].AutoPostBack = true;
    lstFeatureList[i].SelectedIndexChanged += new EventHandler(ItemPannel1);
    plhFeatureHolder.Controls.Add(lstFeatureList[i]);
}

#code slut

Kan man det her på nogen måde ?
Avatar billede repsak Nybegynder
29. marts 2004 - 02:03 #2
du har skrevet alt for meget kode til at jeg gider læse det igennem, men mon du kan bruge dette:
DropDownList[] array = new DropDownList[5];
foreach(DropDownList d in array){
  d = new DropDownList();
  d.Height = 20;
  ...
}
Avatar billede fileto Seniormester
29. marts 2004 - 14:03 #3
Variablen i foreach er read only siger compileren, så det har jeg ikke kunne få til at virke.
Avatar billede repsak Nybegynder
29. marts 2004 - 18:59 #4
argh det er også rigtigt... så bare brug en
for(int i=0 ; i<array.Length ; i++){
  array[i] = new DropDownList();
  array[i].Height = 20;
  ...
}
Avatar billede fileto Seniormester
29. marts 2004 - 20:46 #5
Så, nu virker det :-)
Tak for hjælpen
Avatar billede repsak Nybegynder
29. marts 2004 - 20:47 #6
det lyder godt - velbekomme :-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester