J'ai un complexe UserControl
avec le but principal d'encapsuler DropDownList
avec un certain nombre de propriétés pour une manipulation avancée.Sélection de l'élément dans DropDownList encapsulé sur DataBind
Liste est peuplée sur PreRender
événement en fonction des propriétés précédemment ont été définies:
protected void Page_PreRender(object sender, EventArgs e)
{
sourceClient.SelectCommand = this.Property1 ? "exec a" : "exec b";
}
La propriété la plus utilisée est ClientID:
[Category("Settings")]
public int ClientID
{
get
{
return Int32.Parse(DropDownList1.SelectedItem.Value);
}
set
{
DropDownList1.Items.FindByValue(value).Selected = true;
}
}
Getter est communément appelé par ControlPameters
dans SqlDataSources
pages avec ce contrôle.
Setter - à partir du balisage: <uc:UserControl1 runat="server" ClientID='<%# Bind("ID") %>' />
.
La question est la suivante:
Pourquoi poseur de Bind
est appelé plus tôt alors PreRender
? Et DropDownList
est vide et la sélection d'élément ne fonctionne pas! Comment contourner ce problème?
Édition1: Ok, pas PreRender
mais Init
. Mais DropDownList1_DataBinding est toujours appelé après le setter de propriété! DataBinding se produit toujours avant PreRender
@womp: Salut, merci pour les conseils! J'ai réécrit mon code maintenant j'ai le gestionnaire d'événement Page_DataBinding mais toujours d'abord s'appelle Page_DataBinding après le setter de propriété et après DropDownList1_DataBinding où il est peuplé à partir d'une source de données. Comment lier les données liste déroulante avant setter? – abatishchev