我有一个GridView是数据绑定到一个通用的对象列表。每一行都有一个项目,必须向各种账户开具账单。每个项目都有一个属性,这是一个通用的账单和金额清单 - 这个“子列表”显示在GridView的一列中嵌入的ListView中。如何捕获Gridview中ModalPopupExtender扩展器中的DropDownList的SelectedIndexChange事件?
当用户单击任何给定行上的“编辑”链接时,在GridView的“RowEditing”事件中,我填充隐藏弹出式面板中的所有字段。当用户单击ModalPopupExtender中标识的LinkButton时,该面板将显示所有适当的数据。一个项目是绑定到用户可以从中选择的.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: </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:
</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: </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:
</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" />
<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>
</asp:TableCell>
</asp:TableRow>
</asp:Table>
</EditItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
付费面板显示了应(被点击时lnkAddBill),当它。
'所需的行为'是当用户点击DropDownList中的不同帐户时返回CodeBehind,以便我可以填写标签,告诉他们帐户上有多少钱(因为他们有在该面板的文本框中输入金额)。
这似乎是ModalPopupExtender阻止DropDownList的OnSelectedIndexChanged事件发射。我在使用GridViewRow的EditTemplate中的DropDownLists时没有遇到这种情况 - 当DropDownList位于ModalPopupExtender所针对的面板中时,我似乎无法触发该事件。
我该如何解决这个问题?
我的问题(与该解决方案)是在找到DropDownList,以便我可以得到结果 - 必须得到正确的级联Control.FindControl(“nextcontrol”)语句序列。现在我的问题是让弹出面板更新DISPLAY在DropDownList索引更改时刚加载的信息。我想我必须更改ModalPopupExtender引用UpdatePanel的面板。 – David 2011-03-09 15:43:18