2011-03-09 5 views
0

일반 개체 목록에 데이터 바인딩 된 GridView가 있습니다. 각 행에는 다양한 계정에 대해 요금을 청구해야하는 프로젝트가 있습니다. 각 프로젝트에는 GridView의 열 중 하나에 포함 된 ListView에 '자식 목록'이 표시되는 청구될 계좌 및 금액의 일반 목록 인 속성이 있습니다.GridView에서 ModalPopupExtender 익스텐더에있는 DropDownList의 SelectedIndexChange 이벤트를 트래핑하는 방법은 무엇입니까?

GridView의 "RowEditing"이벤트에서 사용자가 주어진 행의 "편집"링크를 클릭하면 숨겨진 팝업 패널의 모든 필드가 채워집니다. 사용자가 ModalPopupExtender에서 식별 된 LinkButton을 클릭하면 패널에 모든 적절한 데이터가 표시됩니다. 하나의 항목은 사용자가 선택할 수있는 계정 개체의 .NET 일반 목록에 바인딩 된 DropDownList입니다.

내 문제는 사용자가 "확인"단추 (OnCommand, CommandName 및 CommandArgument 특성 사용)로 설정 한 ImageButton을 클릭 할 때까지 "OnSelectedIndexChanged"이벤트가 발생하지 않는다는 것입니다. 이 (lnkAddBill을 클릭했을 때)시기

<asp:Panel runat="server" ID="pnlBilling"> 
<asp:GridView runat="server" ID="grdBilling" AutoGenerateColumns="False" 
    Width="100%" Caption="" AutoGenerateEditButton="True"> 
    <Columns> ' Only showing the pertinent column 
     <asp:TemplateField ItemStyle-VerticalAlign="Top" HeaderText="Project"> 
      <ItemTemplate> 
       <asp:Label ID="lblProject" runat="server" text='<%#Eval("Project")%>' /> 
      </ItemTemplate> 
      <EditItemTemplate> 
       <asp:Label ID="lblProject" runat="server" text='<%#Eval("Project")%>' /> 
      </EditItemTemplate> 
     </asp:TemplateField> 
     <asp:TemplateField HeaderText="Billing"> 
      <ItemTemplate> 
       <asp:Table ID="tblBillEntries" runat="server" Width="100%"> 
        <asp:TableHeaderRow> 
         <asp:TableCell>Current:&nbsp;</asp:TableCell> 
         <asp:TableCell HorizontalAlign="Right"><asp:Label ID="lblAmount" runat="server" Text='<%#Bind("Amount", "{0:c}")%>' /></asp:TableCell> 
        </asp:TableHeaderRow> 
        <asp:TableRow> 
         <asp:TableCell ColumnSpan="2"> 
          <asp:ListView ID="lvwBillDetail" runat="server" DataSource='<%# Eval("Bills") %>' ItemPlaceholderID="lvwBillsPlaceholder"> 
           <LayoutTemplate> 
            <asp:PlaceHolder ID="lvwBillsPlaceholder" runat="server"></asp:PlaceHolder> 
           </LayoutTemplate> 
           <ItemTemplate> 
            <tr> 
             <td> 
              <asp:Label ID="lblAcct" runat="server" Text='<%#Eval("Acct")%>' /> 
             </td> 
             <td align="right"> 
              <asp:Label ID="lblAmtBill" runat="server" Text='<%#Bind("Amount", "{0:c}")%>' ></asp:Label> 
             </td> 
            </tr> 
           </ItemTemplate> 
          </asp:ListView> 
         </asp:TableCell> 
        </asp:TableRow> 
        <asp:TableFooterRow> 
         <asp:TableCell> 
          Remaining:&nbsp; 
         </asp:TableCell> 
         <asp:TableCell HorizontalAlign="Right"> 
          <asp:label ID="lblRemaining" runat="server" Text='<%#Bind("Remaining", "{0:c}")%>' /> 
         </asp:TableCell> 
        </asp:TableFooterRow> 
       </asp:Table> 
      </ItemTemplate> 
      <EditItemTemplate> 
       <asp:Table ID="tblBillEdits" runat="server" GridLines="None" Width="100%"> 
        <asp:TableHeaderRow> 
         <asp:TableCell>Current:&nbsp;</asp:TableCell> 
         <asp:TableCell HorizontalAlign="Right"><asp:Label ID="lblAmount" runat="server" Text='<%#Bind("Amount", "{0:c}")%>' /></asp:TableCell> 
        </asp:TableHeaderRow> 
        <asp:TableRow> 
         <asp:TableCell ColumnSpan="2"> 
          <asp:ListView ID="lvwBillDetail" runat="server" DataSource='<%# Eval("Bills") %>' ItemPlaceholderID="lvwBillsPlaceholder"> 
           <LayoutTemplate> 
            <asp:PlaceHolder ID="lvwBillsPlaceholder" runat="server"></asp:PlaceHolder> 
           </LayoutTemplate> 
           <ItemTemplate> 
            <tr> 
             <td> 
              <asp:Label ID="lblAcct" runat="server" Text='<%#Eval("Acct")%>' /> 
             </td> 
             <td align="right"> 
              <asp:Label ID="lblAmtBill" runat="server" Text='<%#Bind("Amount", "{0:c}")%>' ></asp:Label> 
             </td> 
            </tr> 
           </ItemTemplate> 
          </asp:ListView> 
         </asp:TableCell> 
        </asp:TableRow> 
        <asp:TableRow> 
         <asp:TableCell VerticalAlign="Top" > 
          Remaining:&nbsp; 
         </asp:TableCell> 
         <asp:TableCell HorizontalAlign="Right"> 
          <asp:label ID="lblRemaining" runat="server" Text='<%#Bind("Remaining", "{0:c}")%>' /> 
         </asp:TableCell> 
        </asp:TableRow> 
        <asp:TableRow> 
         <asp:TableCell> 
          <asp:LinkButton ID="lnkAddBill" runat="server" Text="Bill" /> 
          <asp:Panel ID="pnlBill" runat="server" style="display:none" CssClass="GeneralPopup" Width="4in"> 
           <asp:Table runat="server" ID="tblBillButtons" HorizontalAlign="Center" Width="100%"> 
            <asp:TableRow> 
             <asp:TableCell>Project</asp:TableCell> 
             <asp:TableCell><asp:Label ID="lblProjectName" runat="server" /></asp:TableCell> 
            </asp:TableRow> 
            <asp:TableRow> 
             <asp:TableCell>Acct</asp:TableCell> 
             <asp:TableCell> 
               <asp:DropDownList ID="ddlAct" runat="server" OnSelectedIndexChanged="SelectAcct" /> 
             </asp:TableCell> 
            </asp:TableRow> 
            <asp:TableRow> 
             <asp:TableCell>Proj Amt. Avail.</asp:TableCell> 
             <asp:TableCell><asp:Label id="lblProjAmtAvail" runat="server" /></asp:TableCell> 
            </asp:TableRow> 
            <asp:TableRow> 
             <asp:TableCell>Acct Amt. Avail</asp:TableCell> 
             <asp:TableCell><asp:Label ID="lblAcctAmtAvail" runat="server" /></asp:TableCell> 
            </asp:TableRow> 
            <asp:TableRow> 
             <asp:TableCell>Amount to Charge:</asp:TableCell> 
             <asp:TableCell><asp:TextBox ID="txtAmtToCharge" runat="server" /></asp:TableCell> 
            </asp:TableRow> 
            <asp:TableRow HorizontalAlign="Center"> 
             <asp:TableCell> 
              <asp:ImageButton ID="btnOKBill" runat="server" ImageUrl="~/Images/greencheck.gif" OnCommand="PopupButton_Command" CommandName="SelectBill" CommandArgument="Billing" /> 
              &nbsp; &nbsp; &nbsp; 
              <asp:ImageButton ID="btnCxlBill" runat="server" ImageUrl="~/Images/RedX.gif" /> 
             </asp:TableCell> 
            </asp:TableRow> 
           </asp:Table> 
          </asp:Panel> 
          <cc1:ModalPopupExtender ID="mpeBill" runat="server" 
            TargetControlID="lnkAddBill" PopupControlID="pnlBill" 
            BackgroundCssClass="modalBackground" CancelControlID="btnCxlBill" 
            dropshadow="true" PopupDragHandleControlID="pnlBill" /> 
         </asp:TableCell> 
         <asp:TableCell> 
          &nbsp; 
         </asp:TableCell> 
        </asp:TableRow> 
       </asp:Table> 
      </EditItemTemplate> 
     </asp:TemplateField> 
    </Columns> 
</asp:GridView> 

결제 패널이 나타납니다 :

여기에 코드가 얼마나 보여주는에서 시도입니다.

'원하는 동작'은 사용자가 DropDownList의 다른 계정을 클릭 할 때 CodeBehind로 돌아가서 해당 계정에 얼마만큼의 돈이 남아 있는지 알려주는 Label을 채울 수있게합니다. 해당 패널의 텍스트 상자에 금액을 입력하십시오).

ModalPopupExtender가 DropDownList의 OnSelectedIndexChanged 이벤트 발생을 막는 것으로 보입니다. GridViewRow의 EditTemplate에있는 DropDownLists에서이 문제가 발생하는 데 문제가 없습니다. DropDownList가 ModalPopupExtender를 대상으로하는 Panel에있을 때 이벤트가 발생하지 않는 것 같습니다.

어떻게이 문제를 해결할 수 있습니까?

답변

1

이것이 현재 진행 중인지 확실하지 않지만 AutoPostBack = "true"속성을 드롭 다운 목록에 포함하면 어떨까요?

+0

내 솔루션의 문제점으로 인해 DropDownList를 찾아서 결과를 얻을 수있었습니다. Control.FindControl ("nextcontrol") 문을 계단식으로 나열하는 올바른 순서를 가져야했습니다. 이제 내 문제는 DropDownList 인덱스가 변경되었을 때 방금로드 된 정보를 표시하도록 팝업 패널을 업데이트하는 것입니다. ModalPopupExtender가 UpdatePanel을 참조하는 패널을 변경해야한다고 생각합니다. – David

관련 문제