2010-03-21 6 views
1

je - par exemple - un asp: FormView qui prend en charge Read, Insert, Update, Delete et est lié à une source de données:Comment initialiser les contrôles dans un InsertItemTemplate?

<asp:FormView ID="FormView1" runat="server" 
    DataSourceID="ObjectDataSource1" > 
    <ItemTemplate> 
     <asp:Label ID="Label1" runat="server" Text='<%# Bind("MyText") %>' /> 
    </ItemTemplate> 
    <EditItemTemplate> 
     <asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("MyText") %>' /> 
    </EditItemTemplate> 
    <InsertItemTemplate> 
     <asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("MyText") %>' /> 
    </InsertItemTemplate> 
</asp:FormView> 

Si je suis en mode en lecture ou Edit Mode contrôle est initialisé avec la propriété MyText de l'objet actuel lié à FormView. Mais quand je vais en mode Insertion, je n'ai pas d'objet courant (FormView1.DataItem est en effet null) et les contrôles sont vides.

Si je veux initialiser mon contrôle TextBox avec une valeur spécifique, comment puis-je faire cela? Dans quel cas puis-je me connecter pour définir les valeurs par défaut pour les contrôles dans le InsertItemTemplate?

Surtout en utilisant un ObjectDataSource. Je m'attendais à ce que le InsertItemTemplate soit initialisé avec un objet métier qui sous-tend mon ObjectDataSource et qui est créé par le framework ASP.NET simplement en utilisant son constructeur par défaut lorsque le InsertItemTemplate est activé. Dans le constructeur par défaut, j'initierais les membres de la classe aux valeurs par défaut que je voudrais avoir dans mes contrôles du InsertItemTemplate. Mais malheureusement, ce n'est pas le cas: aucun objet "default" n'est créé et lié au FormView. Il semble donc que je dois initialiser tous les contrôles séparément ou créer manuellement l'objet par défaut et le lier au InsertItemTemplate de FormView. Mais comment et où puis-je faire ça?

Merci d'avance!

Répondre

1

Essayez l'événement ModeChanged.

vous pouvez utiliser là

TextBox _tb = this.FormView1.FindControl("TextBox1") as TextBox 
if(_tb != null) 
{ 
    _tb.Text = Mybusinessobject.property; 
} 

Si .FindControl ne retourne null, essayez ceci:

this.FormView1.DataBind(); 
TextBox _tb = this.FormView1.FindControl("TextBox1") as TextBox 
if(_tb != null) 
{ 
    _tb.Text = Mybusinessobject.property; 
} 
+0

Merci pour cette idée! J'ai maintenant utilisé un code similaire dans l'événement DataBound en vérifiant 'if (FormView1.CurrentMode == FormViewMode.Insert)' qui semble également fonctionner. Je cherchais plus une option pour lier un objet métier complet (initialisé par défaut) au FormView mais je ne vois pas un moyen. Il semble que je dois init control par control. – Slauma

Questions connexes