webForumDet fria alternativet

Hitta kontroll i dynamiskt laddad user controll

.NET

3 svar · 279 visningar · startad av erka

Medlem sedan dec. 19996 522 inlägg
Frågan#1

Hej!

Någon som har löst ett liknande problem kanske? Jag har en user controll som heter IngredientDropDownLists, den består av 3 dropdownlists och 1 textbox, med namn Dl1, Dl2, Dl3, txtM.

På en sida skapar jag x antal uppsättningar av denna user controll innuti en placeholder. Det enda jag vet är id:t på de dynamiskt laddade instanserna av. Således vet jag id:t på hela uppsättningen av dropdownlists och textboxar. Det är efter postback jag vill få fram värdena i dropdownlisterna och textboxarna, en usercontroll för sig. Loopa igenom mina usercontrols.

Jag laddar mina user controlls på följande sätt

for (int i = 0; i < numberOfing; i++)
{
 Receptomaten.IngredientDropDownLists uc  = (Receptomaten.IngredientDropDownLists)LoadControl("IngredientDropDownLists.ascx");
 uc.ingredientGroups = m_ingredientGroups;	
 uc.ingredientMeasures = m_measures;
 uc.ingredients = m_ingredients;
 uc.ID = "uc"+ i.ToString();
 plcHldIng.Controls.Add(uc);
}

Hur ska jag göra för att i min knapptrycknings metod få tag på värdena i mina usercontrolls. Jag har provat allt möjligt men det verkar inte lyckas, tacksam för all hjälp

Medlem sedan dec. 19996 522 inlägg
#2

Löste det genom att i metoden för knapptrycket

//Hitta user control
Receptomaten.IngredientDropDownLists tmpUc = (Receptomaten.IngredientDropDownLists)plcHldIng.FindControl("uc"+i.ToString());

//Hitta kontrollerna i user controll
TextBox txtMeasure  = (TextBox)tmpUc.FindControl("txtBoxMeasure");
DropDownList listIngGroup = (DropDownList)tmpUc.FindControl("DropDownList1");
DropDownList listIng = (DropDownList)tmpUc.FindControl("DropDownList2");
DropDownList listIngMeasure = (DropDownList)tmpUc.FindControl("DropDownList3");
Medlem sedan sep. 20011 914 inlägg
#3

Kan du inte istället låta logiken som hör till userControllen vara där. Exempel scenario:

//UserControl
class IngredientDropDownLists : UserControl
{
   #region Properties
   public string Group
   {
      get{return ddlGroups.SelectedValue;}
      set{ddlGroups.SelectedValue = value;}
   }

   public string Ingredient
   {
      get{return ddlIngredients.SelectedValue;}
      set{ddlIngredients.SelectedValue = value;}
   }

   public string MeasureKind
   {
      get{return ddlMeasureKinds.SelectedValue;}
      set{ddlMeasureKinds.SelectedValue = value;}
   }

   public string MeasureQuantity
   {
      get{return txtMeasure.Text;}
      set{txtMeasure.Text = value;}
   }
   #endregion

   protected DropDownList ddlGroups, ddlIngredients, ddlMeasureKinds;
   protected TextBox txtMeasure;
   private void Page_Load(object sender, EventArgs e)
   {

   }

   public static void Save()
   {
      //Spara till din databas
   }
}
//.aspx
foreach(Receptomaten.IngredientDropDownLists uc in plcHldIng.Controls)
{
   //Om du vill skriva ut värderna kan du lätt komma åt dem via
   Response.Write(uc.Group);
   Response.Write(uc.Ingredient);
   Response.Write(uc.MeasureKind);
   Response.Write(uc.MeasureQuantity);

   //Och om du vill spara aktuell IngredientData
   uc.Save();
}
Medlem sedan dec. 19996 522 inlägg
#4

Lustigt att du skriver ditt svar när jag precis tänkt i samma banor, tack för hjälpen, ska mecka lite mer med det.

259 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
119 ms — deklarationer (db)
0 ms — hämta statistik (cache)
127 ms — hämta tråd, inlägg och bilagor (db)
129 ms — ändringar (db)