J'ai un contrôle DetailsView sur les produits d'un magasin. Lorsque j'appuie sur le bouton "Modifier" du contrôle DetailsView, je veux lier un DropDownList pour lister les catégories de produits et sélectionner la catégorie de produit actuelle.La méthode DetailsViewModeChanged ne trouve pas les contrôles dans un certain mode en utilisant la méthode FindCotrol
J'utilise la méthode "ModeChanged" pour sélectionner la catégorie de produits en cours comme celui-ci:
Edit: Balisage:
<asp:DetailsView ID="dtlProduct" runat="server"
DataSourceID="ProductDetailsLinqDataSource" AutoGenerateRows="False"
DataKeyNames="ProductID">
<Fields>
<asp:BoundField DataField="ProductName"
SortExpression="ProductName" />
<asp:TemplateField>
<ItemTemplate>
<asp:Label Text='<%# Eval("ProductCategory.CategoryName") %>' runat="server" />
</ItemTemplate>
<EditItemTemplate>
<asp:DropDownList ID="ddlCategory" runat="server" DataSourceID="LDS_ProductsCategories"
DataTextField="CategoryName" DataValueField="CategoryID" Width="200px">
</asp:DropDownList>
<asp:LinqDataSource ID="LDS_ProductsCategories" runat="server"
ContextTypeName="ProductsDataClassesDataContext"
Select="new (CategoryID, CategoryName)" TableName="ProductCategories">
</asp:LinqDataSource>
</EditItemTemplate>
</asp:TemplateField>
</Fields>
</asp:DetailsView>
code Derrière:
protected void dtlProduct_ModeChanged(object sender, EventArgs e)
{
if (dtlProduct.CurrentMode == DetailsViewMode.Edit)
{
ProductsDataClassesDataContext dc = new ProductsDataClassesDataContext();
var categoryID = (from c in dc.Products
where c.ProductID == (int)dtlProduct.DataKey.Value
select c.ProductCategoryID).FirstOrDefault();
if (categoryID != null)
{
DropDownList ddl = dtlProduct.FindControl("ddlCategory") as DropDownList;
ddl.Items.FindByValue(categoryID.ToString()).Selected = true;
}
}
}
la méthode FindControl qui ne fonctionne pas trouver le "ddlCategory" (renvoie null) bien qu'il soit présent dans le EditTemplateField.
Je ne sais pas ce qui ne va pas!
Je pense à utiliser l'événement "DropDownList's PreRender" pour faire le but que je vise, mais je veux savoir ce qui ne va pas!
Un grand merci ....
Merci, comment puis-je trouver le conteneur d'édition? J'ai ajouté le balisage asp.net, pourriez-vous me guider? –