2011-03-09 45 views
0

我有一个GridView是数据绑定到一个通用的对象列表。每一行都有一个项目,必须向各种账户开具账单。每个项目都有一个属性,这是一个通用的账单和金额清单 - 这个“子列表”显示在GridView的一列中嵌入的ListView中。如何捕获Gridview中ModalPopupExtender扩展器中的DropDownList的SelectedIndexChange事件?

当用户单击任何给定行上的“编辑”链接时,在GridView的“RowEditing”事件中,我填充隐藏弹出式面板中的所有字段。当用户单击ModalPopupExtender中标识的LinkBut​​ton时,该面板将显示所有适当的数据。一个项目是绑定到用户可以从中选择的.NET通用的帐户对象列表的DropDownList。

我的问题是,直到用户点击了我设置为“OK”按钮(使用OnCommand,CommandName和CommandArgument属性)的ImageButton之后,“OnSelectedIndexChanged”事件才会触发。

这里是在显示代码是如何尝试:

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

付费面板显示了应(被点击时lnkAddBill),当它。

'所需的行为'是当用户点击DropDownList中的不同帐户时返回CodeBehind,以便我可以填写标签,告诉他们帐户上有多少钱(因为他们有在该面板的文本框中输入金额)。

这似乎是ModalPopupExtender阻止DropDownList的OnSelectedIndexChanged事件发射。我在使用GridViewRow的EditTemplate中的DropDownLists时没有遇到这种情况 - 当DropDownList位于ModalPopupExtender所针对的面板中时,我似乎无法触发该事件。

我该如何解决这个问题?

回答

1

不知道这是你以后的样子,但是如何将AutoPostBack =“true”属性包含到下拉列表中?

+0

我的问题(与该解决方案)是在找到DropDownList,以便我可以得到结果 - 必须得到正确的级联Control.FindControl(“nextcontrol”)语句序列。现在我的问题是让弹出面板更新DISPLAY在DropDownList索引更改时刚加载的信息。我想我必须更改ModalPopupExtender引用UpdatePanel的面板。 – David 2011-03-09 15:43:18