Метод DetailsView_ModeChanged НЕ находит элементы управления в определенном режиме, используя метод FindCotrol - PullRequest
1 голос
/ 04 декабря 2010

У меня есть элемент управления 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 НЕ находит" ddlCategory "«(возвращает ноль), хотя он присутствует в EditTemplateField.

Я не знаю, что идет не так!

Я думаю использовать событие« DropDownList's PreRender »для достижения цели, к которой я стремлюсь, но я хочу знать, что не так!

Большое спасибо ....

1 Ответ

1 голос
/ 04 декабря 2010

Похоже, вам сначала нужно найти свой контейнер для редактирования.Глядя на ваш вопрос, если я правильно понимаю - я могу предложить использовать событие Databound и связать там выпадающий список.

Проверьте эту ссылку: http://weblogs.asp.net/sukumarraju/archive/2009/11/22/binding-drop-down-list-control-when-details-view-is-in-edit-mode.aspx

Я также думаю, что вы должны переместить ваш источник данных productcategeories:

  <asp:LinqDataSource ID="LDS_ProductsCategories" runat="server" 
                    ContextTypeName="ProductsDataClassesDataContext" 
                    Select="new (CategoryID, CategoryName)" TableName="ProductCategories">
                </asp:LinqDataSource>

за пределы шаблона редактирования (это можетсуществуют за пределами подробного обзора).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...