NB. I am going to be away until Tuesday next week. So all help is appreciated but I will be unable to comment/respond until then.
Comment puis-je modifier un objet personnalisé dans un formulaire ASP.NET FormView en cliquant sur un bouton?
J'ai un formulaire qui modifie une instance d'une classe personnalisée. Les différents contrôles de formulaire (TextBox, DropDownList, etc.) fonctionnent correctement. Cependant, je veux inclure un bouton qui va modifier l'état du DataItem basé sur une logique très simple. Il n'y a aucun contrôle de forme qui pourrait contrôler ce changement d'une manière non confuse.
La situation actuelle est que j'ai un formulaire pour entrer une adresse. L'adresse peut être une adresse australienne «standard» (rue et nom, état de banlieue et code postal) ou peut être «non standard», ce qui signifie qu'il y a 3 lignes d'adresses avant banlieue (pour les personnes ayant des besoins d'adresses plus spécifiques). Je veux un bouton qui dit "ajouter plus de lignes" et en cliquant dessus il va changer l'objet d'être AddressLines.StandardAustralian
à AddressLines.NonStandardAustralian
. Pour les adresses non standard, il y aura un autre bouton qui dit "Supprimer les lignes supplémentaires" et un clic qui inverse le processus. J'ai donc essayé d'ajouter un bouton et de modifier l'état du DataItem dans le code-behind. Mais le problème que je rencontre est que DataItem de FormView est null/nothing. De la lecture de ce SO question, il semble que le problème est que l'élément n'est pas databound lorsque l'événement Click du bouton est déclenché.
Donc, la question; Est-il possible d'obtenir le DataItem pour FormView pendant un événement Click d'un bouton? et si non: quelles sont mes options pour implémenter ceci?
Merci d'avance.
code Derrière:
Private ReadOnly Property addressView() As AddressView
Get
Return CType(FormView1.DataItem, AddressView) ' <-- But DataItem is Nothing when called from lbMakeNonStd_Click
End Get
End Property
Protected Sub lbMakeNonStd_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles lbMakeNonStd.Click
If addressView IsNot Nothing Then
Select Case addressView.NonStd
Case AddressLines.StandardAustralian
addressView.NonStd = AddressLines.NonStandardAustralian
Case AddressLines.NonStandardAustralian
addressView.NonStd = AddressLines.StandardAustralian
Case Else
' Other cases ignored, shouldn't change address lines
End Select
End If
End Sub
Aspx:
<asp:FormView ID="FormView1" runat="server" DataKeyNames="IDNO, AddressType" DataSourceID="ObjectDataSource1" EnableViewState="true" >
<ItemTemplate>
...
</ItemTemplate>
<EditItemTemplate>
<fieldset>
<legend>Address</legend>
<asp:UpdatePanel ID="upAddressFields" runat="server" UpdateMode="Conditional">
<Triggers>
<asp:AsyncPostBackTrigger controlid="txtPostcode" eventname="TextChanged" />
</Triggers>
<ContentTemplate>
<asp:Table ID="tblForm" runat="server">
<asp:TableRow ID="trName" runat="server">
<asp:TableHeaderCell ID="TableCell1" runat="server">
Name
</asp:TableHeaderCell>
<asp:TableCell ID="TableCell2" runat="server">
<asp:TextBox ID="tbName" runat="server" Text='<%# Bind("AlternateName") %>' MaxLength="30"></asp:TextBox>
</asp:TableCell>
</asp:TableRow>
<asp:TableRow ID="TableRow2" runat="server" Cs>
<asp:TableHeaderCell ID="TableCell3" runat="server">
Number and Street
</asp:TableHeaderCell>
<asp:TableCell ID="TableCell4" runat="server">
<asp:TextBox ID="tbLine1" runat="server" Text='<%# Bind("Line1") %>' MaxLength="30"></asp:TextBox>
<asp:PlaceHolder ID="phMakeNonStdButton" runat="server">(<asp:LinkButton ID="lbMakeNonStd" runat="server" Text="Add more lines..." />)</asp:PlaceHolder>
</asp:TableCell>
</asp:TableRow>
<asp:TableRow ID="trLine2" runat="server" CssClass="tablerowbg_light">
<asp:TableHeaderCell ID="TableCell5" runat="server">
Line 2
</asp:TableHeaderCell>
<asp:TableCell ID="TableCell6" runat="server">
<asp:TextBox ID="tbLine2" runat="server" Text='<%# Bind("Line2") %>' MaxLength="30"></asp:TextBox>
<br /><asp:LinkButton ID="lbMakeStd" runat="server" Text="Use fewer lines..." />
</asp:TableCell>
</asp:TableRow>
</asp:Table>
</ContentTemplate>
</asp:UpdatePanel>
<asp:LinkButton ID="lbUpdate" runat="server" CommandName="Update" ValidationGroup="ResidentialAddress" Font-Bold="true">Save Changes</asp:LinkButton> |
<asp:LinkButton ID="lbCancel" runat="server" CommandName="Cancel" CausesValidation="false">Cancel</asp:LinkButton>
</EditItemTemplate>
Le code aiderait. –
Ajout de code-behind pour la méthode de clic de bouton et la source aspx pour FormView et DataSource. Faites-moi savoir s'il y a un autre code qui pourrait être utile. – David