2012-03-29 5 views
1

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

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

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

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

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

Страница:

<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> 

Control Второй пользователь загрузит в заполнитель более много раз:

<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() 

Спасибо, Korv

+0

Пожалуйста, отправьте несколько примеров кода. –

ответ

0

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

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

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

1

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

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

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

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

updPPI.Update() 
+0

Я теперь попробовал позвонить «Обновление» после того, как каждый владелец места заполнен, но я все еще не вижу обновленные Gridviews после нажатия кнопки «Сохранить». – Korv

+0

Можете ли вы опубликовать код, показывающий, как вы привязываете датагриды и обновляете панели? –

+0

Да, я сделаю это в понедельник, если вы сможете проверить, тогда это будет круто – Korv