2010-11-11 3 views
0

Je suis assez nouveau pour usercontrols. Jusqu'à présent, je les ai trouvés très utiles pour gérer de grandes quantités de champs de saisie utilisateur répétitifs. Cependant, j'ai un problème avec la préconfiguration d'une liste déroulante dans le contrôle. J'ajoute un ddl à ma page ascx je lie le ddl et l'exposer:Définir l'index sélectionné dans une liste déroulante dans usercontrol

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!IsPostBack) 
    { 
     List<Travel_CarSize> tc = Travel_CarSizes.GetCarSizes(); 
     ddlCarSize.DataSource = tc; 
     ddlCarSize.DataTextField = "CarSize"; 
     ddlCarSize.DataValueField = "CarSizeID"; 
     ddlCarSize.DataBind(); 
    } 
} 

public string CarSize 
{ 
    get { return ddlCarSize.SelectedValue.ToString(); } 
    set { ddlCarSize.SelectedIndex = ddlCarSize.Items.IndexOf(ddlCarSize.Items.FindByValue(value)); } 
} 

Cependant, lorsque je tente programatically de définir une sélection pour le ddl dans le contrôle, je finis toujours par sa mise en liant le. Dans mon fichier aspx.cs je mis:

CarControl1.CarSize = "3"; 

Le programme est conçu pour afficher un usercontrol vide (avec un ddl databound) et un gridview. L'utilisateur sélectionne une entrée gridview et que usercontrol est rempli avec les données. Ainsi, le ddl est lié dès le départ, puis les événements qui mènent au ddl «présélectionné».

Lorsque cela ne m'a pas donné le résultat que je cherchais, j'ai mis un point d'arrêt sur le if (! IsPostBack), le ddlCarSize.DataBind(); et l'ensemble {}. Je cours le programme, il lie mon ddl et je fais une sélection dans le gridview. Lorsque je clique sur la sélection, j'ai trouvé que ça frappe le if (! IsPostBack) dans le contrôle userc et dit "Oh, ceci est une publication, n'allez pas dans le si." alors il frappe l'ensemble {} mais le ddl est vide maintenant. Ensuite, il frappe à nouveau le if (! IsPostBack) et pour une raison quelconque dit maintenant que ce n'est pas un postback et redéfinit le ddl.

Je pense que c'est un problème assez courant mais je n'ai pas encore trouvé de solution. Toute aide serait grandement appréciée.

Répondre

2
protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!IsPostBack) 
    { 
     Bind() 
    } 
} 

public Bind() 
{ 
    if (ddlCarSize.Items.Count == 0) 
    { 
     List<Travel_CarSize> tc = Travel_CarSizes.GetCarSizes(); 
     ddlCarSize.DataSource = tc; 
     ddlCarSize.DataTextField = "CarSize"; 
     ddlCarSize.DataValueField = "CarSizeID"; 
     ddlCarSize.DataBind(); 
    } 
} 

public string CarSize 
{ 
    get { return ddlCarSize.SelectedValue.ToString(); } 
    set 
    { 
     Bind(); 
     ddlCarSize.SelectedIndex = ddlCarSize.Items.IndexOf(ddlCarSize.Items.FindByValue(value)); } 
} 
+0

Hunter, vous êtes mon nouveau héros personnel. C'est une solution tellement simple et elle ne m'a jamais traversé l'esprit. Je vous remercie. – Jeremy

+0

content je pourrais aider! – hunter

Questions connexes