2014-04-18 39 views
0

感謝您瀏覽此內容。UpdatePanel無法在父級GridView項目模板內工作

背景 - 在我們的項目中有一個共享點2013可視化Web部件。它有4個嵌套的GridViews在一起。點擊一個圖像按鈕3個網格將會擴大。點擊該圖像按鈕後,人口也會被編碼。但是,由於有背教發生,頁面閃爍,所有網格都變得收縮。因此,我決定在第2個網格的項目模板內部的這些網格之上保留一個更新面板。

問題 - 將它放置在那裏後,我可以停止頁面閃爍。它不會再發回帖子,點擊上述圖片按鈕。但是,網格不顯示。在所有。我通過評論更新面板來查詢我是否獲取數據。是的,我正在獲取數據。它正在顯示。但是,一旦打開更新面板,網格又不會再顯示。

我ASPX -

<asp:gridview runat="server" id="gvParent" width="98%" bordercolor="#00ABA4" 
         horizontalalign="Center" borderstyle="Solid" rowstyle-horizontalalign="Center" 
         selectedrowstyle-verticalalign="Middle" 
         autogeneratecolumns="False" datakeynames="Staff ID" emptydatatext="No Record Found!" 
         borderwidth="1px" allowpaging="True" pagesize="5" OnRowDataBound="gvParent_RowDataBound" OnRowCreated="gvParent_RowCreated" > 

         <Columns> 
          <asp:TemplateField> 
             <ItemTemplate> 
              <img alt="" style="cursor: pointer" src="../../_layouts/15/images/eTRAMS_img/plus.gif" /> 
               <asp:Panel ID="PnlClassification" runat="server" Style="display: none"> 

                 <asp:GridView ID="gvClassification" runat="server" AutoGenerateColumns="false" CssClass="ChildGrid" Width="100%" 
                HeaderStyle-HorizontalAlign="Left"> 
                <Columns> 
                 <asp:TemplateField HeaderStyle-HorizontalAlign="Left"> 
                  <ItemTemplate> 
                    <asp:ImageButton ID="ImgClassification" runat="server" ImageUrl="../../_layouts/15/images/eTRAMS_img/plus.gif" 
                     CommandArgument='<%# Eval("HistoryClassification") %>'></asp:ImageButton> 

                   <%--child Gridview--%> 
                   <asp:UpdatePanel ID="UpdatePanel1" ChildrenAsTriggers="false" runat="server" UpdateMode="Always"> 
                      <ContentTemplate> 
                    <asp:Panel ID="pnlCurrent" runat="server" Style="display:none;"> 

                       <asp:GridView ID="gvCurrent" runat="server" AutoGenerateColumns="false" CssClass="ChildGrid" Width="100%" 
                     HeaderStyle-HorizontalAlign="Left" DataKeyNames="TrainingName"> 
                     <Columns> 
                      <asp:TemplateField HeaderText="No."> 
                       <ItemTemplate> 
                        <asp:Label ID="Label1" runat="server"></asp:Label> 
                       </ItemTemplate> 
                      </asp:TemplateField> 
                      <asp:BoundField DataField="TrainingName" HeaderText="Training Title" /> 
                      <asp:BoundField DataField="LastTrainingAttendedFrom" HeaderText="Attended Date From" /> 
                      <asp:BoundField DataField="LastTrainingAttendedTo" HeaderText="Attended Date To" /> 
                      <asp:BoundField DataField="Refresher" HeaderText="Remark" /> 
                     </Columns> 
                   </asp:GridView>                    
                    </asp:Panel> 


                    <asp:Panel ID="PnlOthers" runat="server" Style="display:none;"> 

                       <asp:GridView ID="gvOthers" runat="server" AutoGenerateColumns="false" 
                        CssClass="ChildGrid" Width="100%" HeaderStyle-HorizontalAlign="Left" 
                        DataKeyNames="TrainingName"> 
                     <Columns> 
                      <asp:TemplateField HeaderText="No."> 
                       <ItemTemplate> 
                        <asp:Label ID="Label2" runat="server"></asp:Label> 
                       </ItemTemplate> 
                      </asp:TemplateField> 
                      <asp:BoundField DataField="TrainingName" HeaderText="Training Title" /> 
                      <asp:BoundField DataField="LastTrainingAttendedFrom" HeaderText="Attended Date From" /> 
                      <asp:BoundField DataField="LastTrainingAttendedTo" HeaderText="Attended Date To" /> 
                     </Columns> 
                   </asp:GridView> 
                     </asp:Panel> 
                      </ContentTemplate> 
                      <Triggers> 
                       <%--<asp:AsyncPostBackTrigger ControlID="ImgClassification" EventName="Click" />--%> 
                      </Triggers> 
                      </asp:UpdatePanel> 


                   <asp:Label ID="lblClassification" runat="server" Text='<%# Eval("HistoryClassification") %>' CommandName="Select"></asp:Label> 

                  </ItemTemplate> 
                 </asp:TemplateField> 
                </Columns> 
               </asp:GridView>               
              </asp:Panel> 
             </ItemTemplate> 
             <ItemStyle Width="20px" /> 
          </asp:TemplateField> 
          <asp:TemplateField HeaderText="No."> 
           <ItemTemplate> 
            <asp:Label ID="Label4" runat="server"></asp:Label> 
           </ItemTemplate> 
          </asp:TemplateField> 
          <asp:BoundField DataField="Staff Name" HeaderText="Staff Name" /> 
          <asp:BoundField DataField="Staff ID" HeaderText="Staff Number" /> 
          <asp:BoundField DataField="Position Code" HeaderText="Position Code" /> 
          <asp:BoundField DataField="Position Title" HeaderText="Position Name" /> 
          <asp:BoundField DataField="Division" HeaderText="Division" /> 
          <asp:BoundField DataField="Department" HeaderText="Department" /> 
          <asp:BoundField DataField="Section" HeaderText="Section" /> 


         </Columns> 

        </asp:gridview> 

代碼背後 -

protected override void OnInit(EventArgs e) 
    { 
     base.OnInit(e); 
     InitializeControl(); 
     ScriptManager.GetCurrent(this.Page).RegisterAsyncPostBackControl(gvParent); 
    } 

私人無效ImgClassification_Click(對象發件人,ImageClickEventArgs E) { 的ImageButton ImgClassification =(發送者作爲的ImageButton); GridViewRow row =(ImgClassification.NamingContainer as GridViewRow); if(ImgClassification.CommandArgument ==「Current」) { row.FindControl(「pnlCurrent」)。Visible = true; ImgClassification.ImageUrl =「../../_layouts/15/images/eTRAMS_img/minus.jpg」; GridView gvCurrent = row.FindControl(「gvCurrent」)as GridView; string strPast = ImgClassification.CommandArgument; getCurrentHistory(strPast,gvCurrent);

  UpdatePanel updtPnlPast = row.FindControl("UpdatePanel1") as UpdatePanel; 
      updtPnlPast.Update(); 
     } 

     if(ImgClassification.CommandArgument == "Past") 
     { 
      row.FindControl("PnlOthers").Visible = true; 
      ImgClassification.ImageUrl = "../../_layouts/15/images/eTRAMS_img/minus.jpg"; 
      GridView gvOthers = row.FindControl("gvOthers") as GridView; 
      string strPast = ImgClassification.CommandArgument; 
      getJoinQuery(strPast, gvOthers); 

      UpdatePanel updtPnlPast = row.FindControl("UpdatePanel1") as UpdatePanel; 
      updtPnlPast.Update(); 
     } 

     if (ImgClassification.CommandArgument == "Others") 
     { 
      row.FindControl("PnlOthers").Visible = true; 
      ImgClassification.ImageUrl = "../../_layouts/15/images/eTRAMS_img/minus.jpg"; 
      GridView gvOthers = row.FindControl("gvOthers") as GridView; 
      string strPast = ImgClassification.CommandArgument; 
      getJoinQuery(strPast, gvOthers); 

      UpdatePanel updtPnlPast = row.FindControl("UpdatePanel1") as UpdatePanel; 
      updtPnlPast.Update(); 

     } 
    } 

我嘗試儘可能多的東西,但我沒有嘗試過,但沒有結果。你能弄清楚,我在這裏錯過了什麼?正在停止顯示網格。

+0

這是在SharePoint以外的相同行爲(在純ASP.NET環境中)還是僅在SharePoint? –

+0

這是一個Visual Web部件,因此只能在SharePoint中使用。我還沒有嘗試與ASP.Net – user2375504

+0

我認爲,你應該嘗試。如果它在純粹的asp.net環境中出現同樣的錯誤 - 它不是特定的SharePoint。 Google有一些關於templatefield裏面的updatepanel的線程。 –

回答

0

最後,我發現有一定的複雜性限制,可以由UpDatePanel處理,但不能超過這個限制。對於我的情況來說,這是相當深的嵌套問題,所以我無法實現它。最後我轉向了JQuery方法來達到我的目標,這對我來說工作起來相當不錯。

感謝你們每一位的支持和建議。