2017-09-20 13 views
0

リピータ内にあるときにドロップダウンリストコントロールを動的に更新する際に問題があります。リピータの正しいコントロール/アップデートパネルを取得する問題

基本的に私はリピーターを持っていて、そのリピーターの中に2つのドロップダウンリストがあります。一方のリストは自分のaspxページで定義され、もう一方のドロップダウンリストは最初のドロップダウンリストの選択に基づいて動的に更新できるようにする更新パネルの中にあります。私は私の問題の一部は、複数のリピータアイテムを持っているため、アップデートパネルが混乱していると思いますか?

<asp:Repeater ID="billingTemplate" runat="server" OnItemDataBound="template_ItemDataBound"> 
    <ItemTemplate> 
     <tr style="font-size: 100%" runat="server"> 
      <td colspan="4" style="width: 100%; vertical-align: top"> 
       <div class="panel panel-default panel-billing"> 
        <asp:Panel CssClass="row panel-heading panel-heading-billing text-left" ID="headingBilling" ClientIDMode="Static" runat="server"> 
         <div class="col-xs-1"> 
          <input type="hidden" id="templateUK" runat="server" value='<%#Eval("templateUK")%>' /> 
          <a href="#collapseBilling" id="BillingPanelBtn" clientidmode="Static" class="btn btn-block btn-group-xs panel-button glyphicon glyphicon-chevron-down" data-toggle="collapse" runat="server"></a> 
         </div> 
         <div class="col-sm-3"> 
          <label for="ddlInvFilterType" class="col-sm-4 control-label text-right labelCls testclass">Filter Type:</label> 
          <div class="col-sm-8"> 
           <asp:DropDownList runat="server" ID="ddlInvFilterType" ClientIDMode="Static" placeholder="Choose Filter Type" CssClass="form-control smallSize FilterType" AutoPostBack="true" OnSelectedIndexChanged="ddlFilterType_SelectedIndexChanged"> 
            <asp:ListItem Value="">- None -</asp:ListItem> 
            <asp:ListItem Value="RevType1">Revenue Type 1</asp:ListItem> 
            <asp:ListItem Value="RevType2">Revenue Type 2</asp:ListItem> 
            <asp:ListItem Value="RevType3">Revenue Type 3</asp:ListItem> 
            <asp:ListItem Value="ServiceTeams">Service Team</asp:ListItem> 
           </asp:DropDownList> 
          </div> 
         </div> 
         <asp:UpdatePanel ID="InvFilterValuePanel" ClientIDMode="Static" runat="server" UpdateMode="Conditional" ChildrenAsTriggers="false"> 
          <ContentTemplate> 
           <div class="col-sm-3"> 
            <label for="ddlInvFilterValue" class="col-sm-4 control-label text-right labelCls">Filter Value:</label> 
             <div class="col-sm-8"> 
              <asp:DropDownList runat="server" ID="ddlInvFilterValue" ClientIDMode="Static" placeholder="Choose Filter Value" CssClass="col-sm-6 form-control smallSize"> 
               <asp:ListItem Value="">- None -</asp:ListItem> 
              </asp:DropDownList> 
             </div> 
           </div> 
          </ContentTemplate> 
          <Triggers> 
           <asp:AsyncPostBackTrigger ControlID="ddlInvFilterType" EventName="SelectedIndexChanged" /> 
          </Triggers> 
         </asp:UpdatePanel> 
        </asp:Panel> 
        <asp:Panel CssClass="panel-collapse collapse" ID="collapseBilling" ClientIDMode="Static" runat="server"> 
         <div class="panel-body"> 
          <table class="table table-condensed table-bordered" style="margin: 0; padding: 0; border-top: none; border-bottom: none; border-left: thin; border-right: thin"> 
           <tbody>                 
            <%-- other controls --%> 
           </tbody> 
          </table> 
         </div> 
        </asp:Panel> 
       </div> 
      </td> 
     </tr> 
    </ItemTemplate> 
</asp:Repeater> 

私の選択率の変化のためのHERESにコード:

protected void ddlFilterType_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    try 
    { 
     DropDownList ddl = (DropDownList)sender; 

     string ddlClass = ddl.CssClass; 
     string[] classes = ddlClass.Split(' '); 
     string repeaterClass = classes[classes.Length - 1]; 
     string repeaterID = "0"; 

     string appendStr = ""; 

     if (repeaterClass.Contains("templateID")) 
     { 
      repeaterID = repeaterClass.Substring(repeaterClass.Length - 1); 
      appendStr = "_" + repeaterID; 
     }    

     foreach (RepeaterItem item in billingTemplate.Items) 
     { 
      HtmlInputHidden hidden = item.FindControl("headingBilling").FindControl("templateUK") as HtmlInputHidden; 

      if (hidden.Value == repeaterID) 
      { 
       DropDownList d1 = item.FindControl("headingBilling").FindControl("ddlInvFilterType") as DropDownList; 
       DropDownList d2 = item.FindControl("headingBilling").FindControl("ddlInvFilterValue") as DropDownList; 

      if (d1.SelectedValue.Length > 0) 
      { 
       d2.Items.Clear(); 
       d2.Items.Add(new ListItem(" - None - ", "")); 
        switch (d1.SelectedValue) 
        { 
         case "ServiceTeams": 
          foreach (var pair in serviceTeamsController.GetAllServiceTeamsLOVs()) 
          { 
           if (!String.IsNullOrWhiteSpace(pair.Value)) 
            d2.Items.Add(new ListItem(pair.Value, pair.Key)); 
          } 
          break; 
         default: 
          foreach (var pair in masterController.GetMasterLOVs(filterTypeDict[d1.SelectedValue])) 
          { 
           if (!String.IsNullOrWhiteSpace(pair.Value)) 
           { 
            d2.Items.Add(new ListItem(pair.Value, pair.Key)); 
           } 
          } 
          break;         
         } 
        } 
        else 
        { 
         d2.Items.Clear(); 
         d2.Items.Add(new ListItem(" - None - ", "")); 
        }     
      }     
     } 
    } 
    catch (Exception ex) 
    { 

    } 
} 

相続人以上のtheresのときに私が見ています何のスクリーンショットここ

は私のリピーターのためのコードですリピーターアイテム:

enter image description here

Basical今起きているのは、item2のフィルタタイプを更新するとアイテム1のフィルタ値を更新する場合です。item1のフィルタタイプを更新すると、アイテム1のフィルタ値が期待通りに更新されます。

私が欲しいのは、item2フィルタタイプを更新でき、それに応じてアイテム2のフィルタ値が更新されることです。

誰かが私が紛失している可能性のあるアイディアはありますか?

+0

あなたが書いているこの新しいコードまたはあなたが強化しようとしている既存のコードはありますか? –

+0

@EricWalterその新しいコード私はwiritingしています – Kristen

答えて

0

これがうまくいくようになったのですが、主な問題は、clientidmodeが更新パネルを何とか混乱させていたと思いますので、削除して、両方のドロップダウンを更新パネルにしました。私もトリガーを必要としていなかったので、それも取り除いた。

関連する問題