상점 제품에 대한 DetailsView 컨트롤이 있습니다.DetailsView_ModeChanged 메서드는 FindCotrol 메서드를 사용하여 특정 모드에서 컨트롤을 찾지 못합니다.
DetailsView 컨트롤의 "편집"단추를 누르면 DropDownList를 바인딩하여 제품 범주를 나열하고 그 안에 현재 제품 범주를 선택합니다.
이편집 : 마크 업 : 뒤에
<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 메서드는하지 않습니다
는이 같은 현재 제품 범주를 선택하는 방법 "ModeChanged"를 사용 EditTemplateField에 있지만 "ddlCategory"(null을 반환)를 찾습니다.
나는 무엇이 잘못 될 지 모른다.
내가 목표로하는 목적으로 "DropDownList 's PreRender"이벤트를 사용하려고 생각하지만, 무엇이 잘못되었는지 알고 싶습니다!
많은 감사합니다 ....
감사합니다. 편집 컨테이너는 어떻게 찾을 수 있습니까? asp.net 마크 업을 추가했습니다. 안내 할 수 있습니까? –