Как обновить несколько Gridview для нескольких пользовательских элементов управления, когда Gridview и пользовательские элементы управления находятся внутри панелей обновления? - PullRequest
1 голос
/ 29 марта 2012

У меня есть страница с заполнителем ASP, обернутая в панель обновления, я загружаю один пользовательский элемент управления с другим заполнителем, обернутым в панель обновления. Затем я загружаю этот новейший заполнитель с несколькими пользовательскими элементами управления, каждый из которых содержит Gridview, завернутый в панель обновления.

Данные в каждом Gridview основаны на данных в «предыдущих» Gridview, поэтому, когда пользователь редактирует строку, каскад изменений вниз по Gridview, вот где моя проблема. После нажатия кнопки сохранения ничего не происходит (все строки в базе данных обновляются правильно), пока я не нажму еще одну кнопку в любом месте страницы, после чего все изменения будут заметно обновлены в Gridviews.

Я перепробовал все, что мог придумать, чтобы исправить это, без конца играть с опциями и позициями панели обновления, вызывая дополнительное нажатие кнопки с помощью JavaScript и любого другого решения, которое я мог найти, которое казалось уместным, хотя ни одно не получило я ближе к тому месту, где я хочу быть.

Если мне удалось передать мои проблемы таким образом, чтобы кто-нибудь мог понять, что я был бы благодарен за понимание, пожалуйста, задавайте вопросы, если вы чувствуете, что я не описал что-то вразумительно.

Вот три уровня и страница / пользовательский контроль / пользовательский контроль:

Страница:

<div id="divCustomerProductInput">
    <asp:UpdatePanel ID="udpSalesOrders" runat="server" UpdateMode="Always">
        <ContentTemplate>
            <asp:PlaceHolder ID="plhCsCustomerproductInput" runat="server"></asp:PlaceHolder>
        </ContentTemplate>
    </asp:UpdatePanel>
</div>

Первый пользовательский элемент управления загружен в заполнитель выше:

<asp:UpdatePanel ID="udpSalesOrders" runat="server" UpdateMode="Always" >
    <ContentTemplate>
        <asp:PlaceHolder runat="server" ID="plhProductionProcess"></asp:PlaceHolder>
    </ContentTemplate>
</asp:UpdatePanel>

Второй пользовательский элемент управления загружен в заполнитель выше несколько раз:

<asp:UpdatePanel ID="udpPPI" runat="server" UpdateMode="Always">
        <ContentTemplate>
            <%--  MANUFACTURE--%>
            <asp:GridView ID="gdvProductionProcessIngredients" AutoGenerateColumns="false" runat="server">
                <Columns>
                    <asp:TemplateField Visible="false">
                        <ItemTemplate>
                            <asp:Label ID="lblId" runat="server" Text='<%# Eval("Id") %>'></asp:Label></ItemTemplate>
                    </asp:TemplateField>
                    <asp:TemplateField HeaderText="Ingredient Description" ItemStyle-Width="21%" ControlStyle-Width="95%">
                        <ItemTemplate>
                            <asp:Label ID="txtIngredientDescription" runat="server" Text='<%# Eval("IngredientDescription") %>'></asp:Label></ItemTemplate>
                    </asp:TemplateField>
                    <asp:TemplateField HeaderText="Ingredient Code" ItemStyle-Width="14%" ControlStyle-Width="95%">
                        <ItemTemplate>
                            <asp:Label ID="txtIngredientCode" runat="server" Text='<%# Eval("RmId") %>'></asp:Label></ItemTemplate>
                    </asp:TemplateField>
                    <asp:TemplateField HeaderText="From" ItemStyle-Width="10%" ControlStyle-Width="95%">
                        <ItemTemplate>
                            <asp:Label ID="txtParentDepartment" runat="server" Text='<%# Eval("ParentDepartment") %>'></asp:Label></ItemTemplate>
                    </asp:TemplateField>
                    <asp:TemplateField HeaderText="Quantity (%)" ItemStyle-Width="10%" ControlStyle-Width="95%">
                        <ItemTemplate>
                            <asp:TextBox ID="txtQuantityKg" runat="server" Text='<%# Eval("OldestAncestorQuantityPercent") %>'
                                ForeColor="Black"></asp:TextBox></ItemTemplate>
                    </asp:TemplateField>
                    <asp:TemplateField HeaderText="Input Cost / Kg (£)" ItemStyle-Width="13%" ControlStyle-Width="95%">
                        <ItemTemplate>
                            <asp:Label ID="lblCost" runat="server" Text='<%# Eval("InputCostKg") %>'></asp:Label></ItemTemplate>
                    </asp:TemplateField>
                    <asp:TemplateField HeaderText="Yield (%)" ItemStyle-Width="10%" ControlStyle-Width="95%">
                        <ItemTemplate>
                            <asp:TextBox ID="txtYield" runat="server" Text='<%# Eval("Yield") %>' ForeColor="Black"></asp:TextBox></ItemTemplate>
                    </asp:TemplateField>
                    <asp:TemplateField HeaderText="Output Cost / Kg (£)" ItemStyle-Width="14%" ControlStyle-Width="95%">
                        <ItemTemplate>
                            <asp:Label ID="lblCostPerKg" runat="server" Text='<%# Eval("OutputCostKg") %>'></asp:Label></ItemTemplate>
                    </asp:TemplateField>
                    <asp:TemplateField ItemStyle-Width="6%" ControlStyle-Width="95%" ItemStyle-HorizontalAlign="Center">
                        <ItemTemplate>
                            <asp:Button ID="btnDeleteIngredient" CommandName="REMOVE" CommandArgument='<%# Eval("Id") %>'
                                CssClass="btn danger hover" runat="server" Text="Remove" /></ItemTemplate>
                    </asp:TemplateField>
                </Columns>
            </asp:GridView>
        </ContentTemplate>
    </asp:UpdatePanel>

Хорошо, вот код привязки и обновления:

  Dim myCsProductProductionProcessIngredients As New v2.Model.CsProductProductionProcessIngredientCollection
    myCsProductProductionProcessIngredients.LoadByPPPId(_ProductProductionProcessId)

    Me.gdvProductionProcessIngredients.DataSource = myCsProductProductionProcessIngredients
    Me.gdvProductionProcessIngredients.DataBind()

    Me.udpPPI.Update()

Спасибо, Корв

Ответы [ 2 ]

1 голос
/ 29 марта 2012

Если вам нужно обновить элемент управления в отдельной панели обновлений, измените режим обновления панели обновления на «условный», затем, когда вам нужно обновить панель, вы можете вызвать метод обновления панели обновления.

Дляпример, если udpPPI - это панель, которую необходимо обновить при обновлении plhProductionProcess.

<asp:UpdatePanel ID="udpPPI" runat="server" UpdateMode="Conditional">

После обновления элемента управления в plhProductionProcess вызовите:

updPPI.Update()
0 голосов
/ 23 апреля 2012

Я понял, почему мои панели обновления не обновляются.

Я делал неверное предположение о жизненном цикле страницы и предполагал, что событие, вызванное нажатием кнопки, произошло до загрузки страницы.

Теперь я переместил код совокупности Gridview вPage_PreRender и все работает, как я планировал.

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