我有一个关于商店产品的DetailsView控件。
当我点击DetailsView控件的“编辑”按钮时,我想绑定DropDownList以列出产品类别并选择其中的当前产品类别。
我使用方法“ModeChanged”来选择当前的产品类别:
编辑:加价:
<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>
代码背后:
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;
}
}
}
FindControl方法虽然它出现在EditTemplateField中,却找不到“ddlCategory”(返回null)。
我不知道出了什么问题!
我正在考虑使用“DropDownList的PreRender”活动来实现我的目标,但我想知道出了什么问题!
非常感谢....
答案 0 :(得分:1)
看起来您需要先找到您的编辑容器。看看你的问题,如果我理解正确 - 我可能会建议使用Databound事件并在那里绑定下拉列表。
我也在想你应该移动你的productcategeories数据源:
<asp:LinqDataSource ID="LDS_ProductsCategories" runat="server"
ContextTypeName="ProductsDataClassesDataContext"
Select="new (CategoryID, CategoryName)" TableName="ProductCategories">
</asp:LinqDataSource>
到编辑模板之外(它可以存在于detailsview之外)。