Je travaille avec le contrôle listview. Par défaut, je montre l'itemtemplate avec un bouton d'édition. Lorsque vous appuyez sur le bouton d'édition, la liste affiche le modèle d'édition. Je dois remplir l'un des contrôles du modèle d'édition en fonction de l'élément en cours d'édition. J'ai essayé d'accéder au contrôle (via FindControl) dans l'événement ItemEditing (et à peu près tous les autres événements). t semblent exister. Je peux accéder aux contrôles dans le modèle d'article, mais pas dans le modèle d'édition. Est-ce que quelqu'un peut me dire comment je peux accéder à un contrôle détenu dans le modèle edititem d'une liste, et à partir de quel événement je devrais le faire?Accès aux contrôles dans le modèle d'édition d'une vue de liste
EDIT Je suis en train d'accéder au contrôle en utilisant ceci:
protected void UnitsLV_ItemEditing(object sender, ListViewEditEventArgs e)
{
ListViewItem item = UnitsLV.Items[e.NewEditIndex];
ListBox tempLB = (ListBox)e.item.FindControl("ListBox3");
}
J'ai aussi essayé dans ItemDataBound et ItemCreated.
La déclaration listview est:
<asp:Content ID="Content1" ContentPlaceHolderID="ColumnA" runat="server">
<asp:Panel ID="Panel1" runat="server">
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<asp:Panel ID="SummaryPnl" runat="server">
<asp:ListView ID="UnitsLV" runat="server" DataSourceID="DataLDS" DataKeyNames="u_uid"
InsertItemPosition="LastItem" OnItemInserting="UnitsLV_ItemInserting" OnItemDataBound="UnitsLV_ItemDataBound"
OnItemCreated="UnitsLV_ItemCreated" onitemediting="UnitsLV_ItemEditing">
<ItemTemplate>
<tr class="rowA">
<td>
<asp:Label runat="server" ID="UnitIDLbl" Text='<%# Eval("u_uid")%>'></asp:Label>
</td>
<td>
<%# Eval("u_Title")%>
</td>
<td>
<asp:LinkButton ID="EditBtn" runat="server" CommandName="Edit" CommandArgument='<%#Eval("u_uid") %>'
Text="Edit" />
</td>
<td>
<asp:LinkButton ID="DeleteBtn" runat="server" CommandName="Delete" CommandArgument='<%#Eval("u_uid") %>'
Text="Delete" />
</td>
</tr>
</ItemTemplate>
<InsertItemTemplate>
<tr class="rowB">
<td>
<br />
</td>
<td>
<br />
<asp:TextBox ID="TitleTB" runat="server" Text='<% #Bind("u_Title")%>'></asp:TextBox>
</td>
<td>
<br />
<asp:ListBox ID="ListBox3" runat="server"></asp:ListBox>
<asp:ListBox ID="ToBeDeletedLB" runat="server"></asp:ListBox>
</td>
<td>
<asp:LinkButton ID="InsertBtn" runat="server" CommandName="Insert" Text="Insert" />
</td>
<td>
<asp:LinkButton ID="CancelBtn" runat="server" CommandName="Cancel" Text="Cancel" />
</td>
</tr>
</InsertItemTemplate>
<EditItemTemplate>
<tr class="rowB">
<td>
<br />
<asp:Label runat="server" ID="UnitIDLbl" Text='<%# Bind("u_uid")%>'></asp:Label>
</td>
<td>
<br />
<asp:TextBox ID="TitleTB" runat="server" Text='<% #Bind("u_Title")%>'></asp:TextBox>
</td>
<td>
<br />
<asp:ListBox ID="ListBox3" runat="server"></asp:ListBox>
<asp:ListBox ID="ToBeDeletedLB" runat="server"></asp:ListBox>
</td>
<td>
<asp:LinkButton ID="UpdateBtn" runat="server" CommandName="Update" Text="Update" />
</td>
<td>
<asp:LinkButton ID="LinkButton2" runat="server" CommandName="Cancel" Text="Cancel" />
</td>
</tr>
</EditItemTemplate>
<LayoutTemplate>
<table id="Table2" runat="server" width="100%">
<tr id="Tr1" runat="server">
<td id="Td1" runat="server">
<table id="itemPlaceholderContainer" runat="server" border="0" style="" width="100%">
<tr id="itemPlaceholder" runat="server"></tr>
</table>
</td>
</tr>
<tr id="Tr2" runat="server">
<td id="Td2" runat="server" style=""></td>
</tr>
</table>
</LayoutTemplate>
</asp:ListView>
</asp:Panel>
</ContentTemplate>
</asp:UpdatePanel>
</asp:Panel>
</asp:Content>
EDIT: J'ai itéré tous les contrôles dans le listview en utilisant le code similaire ci-dessous, et le contrôle est toujours pas visible. L'événement ItemEditing est-il déclenché avant l'affichage du modèle d'édition? Si oui, quel événement puis-je utiliser pour accéder aux contrôles du modèle d'édition?
foreach (Control child in control.Controls)
{
Control result = Find(child, id);
if (result != null)
{
return result;
}
}
** EDIT: ** Je peux accéder aux commandes de la EditItemTemplate dans le cas ItemCreated du listview, mais aucun, ils ont pas de contenu (je suppose que les données n'a pas encore été lié), donc Je ne peux pas obtenir la valeur-clé dont j'ai besoin pour rechercher les données dont j'ai besoin pour remplir le contrôle.
Le code où vous appelez « FindControl » serait utile, ainsi que le code déclaratif listview . – Phaedrus
Il s'agit peut-être d'une faute de frappe, mais dans votre événement ItemEditing, vous recherchez "ListBox2" qui existe dans votre modèle d'insertitem. La zone de liste dans votre edititemtemplate est 'ListBox3'. – Phaedrus
C'est une faute de frappe dans le code simplifié que j'ai posté (pas dans le vrai code) - Je vais le corriger maintenant. –