À l'aide de FindControl: l'Accès aux Contrôles dans un Formview

Je suis l'élaboration d'une simple Liste de Mariage application, où vous pourrez vous réserve les présentes, qu'ils veulent acheter pour la mariée et le marié. La Réserve de la page enveloppe un peu de champs à l'intérieur d'un couple de panneaux, le tout enveloppé à l'intérieur d'un FormView.

L'utilisateur entre son nom, e-mail et la quantité des articles que vous souhaitez réserver et faire les réservations nécessaires dans la base de données.

Mon premier problème était que, dans FormView_ItemCommand, je ne pouvais pas faire référence à un des autres contrôles dans le FormView.... J'ai pensé que c'était un cas pour FindControl - mais pourquoi ai-je besoin d'un Formview lorsque je n'ai jamais eu besoin pour ListViews ou DetailViews?

Deuxièmement, je sais que le code suivant fonctionne..

Dim oCtrl as TextBox = Me.fvwReservation.FindControl("txtEmail")
Dim Test As String = oCtrl.Text

...mais pourquoi je ne peux pas utiliser...

Dim Test As String = Me.fvwReservation.FindControl("txtEmail").Text

??

Enfin, je ne pense pas que j'en ai besoin, à cette occasion, mais j'ai fait des recherches récursives FindControl variantes, mais je n'ai pas réellement trouvé un qui fait la compile! Des suggestions?

C'est beaucoup pour un post - merci à l'avance.

Gratuite Extrait De Code:

<asp:FormView ID="fvwReservation" runat="Server" DataSourceID="dsGift">
<ItemTemplate>
<asp:Panel runat="server" ID="pnlDetails">
<h3>Reserve Item: <%#Eval("ShortDesc")%></h3>
<p>You have chosen to reserve the <em><%#Eval("LongDesc")%></em> gift.</p>
<p>Please enter your details below to confirm the reservation.</p>
</asp:Panel>
<asp:Panel runat="server" ID="pnlConfirm">
<div class="row">
<asp:Label runat="server" CssClass="label">Name:</asp:Label><asp:TextBox ID="txtName" MaxLength="50" runat="server" CssClass="Field" />
<asp:RequiredFieldValidator ID="rfvName" runat="server" ErrorMessage="You must specify your Name" ControlToValidate="txtName" />
</div>
<div class="row">
<asp:Label runat="server" CssClass="label">Email:</asp:Label><asp:TextBox ID="txtEmail" MaxLength="100" runat="server" CssClass="Field"/>
<asp:RequiredFieldValidator ID="rfvEmail" runat="server" ErrorMessage="You must specify your Email Address" ControlToValidate="txtEmail" />
<asp:RegularExpressionValidator ID="regexEmail" ValidationExpression="^(([A-Za-z0-9]+_+)|([A-Za-z0-9]+\-+)|([A-Za-z0-9]+\.+)|([A-Za-z0-9]+\++))*[A-Za-z0-9]+@((\w+\-+)|(\w+\.))*\w{1,63}\.[a-zA-Z]{2,6}$" runat="server" ErrorMessage="Please enter a valid Email Address" ControlToValidate="txtEmail" />
</div>
<div class="row">
<asp:Label runat="server" CssClass="label">Quantity (max <%#Eval("QtyRemaining")%>):</asp:Label><asp:TextBox ID="iQty" MaxLength="2" runat="server" CssClass="Field" />
<asp:RangeValidator ID="rvQty" runat="server" ErrorMessage="The Quantity mmust be between 1 and 10" MinimumValue="1" MaximumValue="10" ControlToValidate="iQty" />
</div>
<div class="row">
<asp:Label runat="server" CssClass="label">&nbsp;</asp:Label>
<asp:Button ID="btnReserve" Text="Confirm Reservation" CommandName="Reserve" runat="server" />
</div>
</asp:Panel>      
</ItemTemplate>
</asp:FormView>

OriginalL'auteur CJM | 2009-10-21