У меня есть GridView, который связан с данными общего списка объектов.В каждой строке есть проект, который должен быть выставлен на счет различных учетных записей.Каждый проект имеет Свойство, которое представляет собой общий список счетов и сумм, по которым выставляются счета, - этот «дочерний список» отображается в ListView, встроенном в один из столбцов GridView.
Когда пользователь нажимает «Изменить ссылку в любой строке, в событии «RowEditing» GridView, я заполняю все поля в скрытой всплывающей панели.Когда пользователь щелкает LinkButton, который идентифицирован в ModalPopupExtender, панель отображается со всеми соответствующими данными.Одним из элементов является DropDownList, связанный с общим списком объектов учетной записи .NET, из которого пользователь может выбирать.
Моя проблема заключается в том, что событие «OnSelectedIndexChanged» не запускается до тех пор, пока пользователь не нажмет на кнопку ImageButton.которую я настроил как кнопку «ОК» (используя атрибуты OnCommand, CommandName и CommandArgument).
Вот попытка показать, как выглядит код:
<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).
«Желаемое поведение» - возвращаться к CodeBehind, когда пользователь нажимает на другую учетную запись в DropDownList, чтобы я мог заполнить метку, котораясообщает им, сколько денег осталось на счете (так как они должны ввести сумму в текстовое поле на этой панели).
Может показаться, что ModalPopupExtender предотвращает запуск события OnSelectedIndexChanged DropDownList.У меня нет проблем с тем, чтобы это произошло с DropDownLists, которые находятся в EditTemplate GridViewRow - просто кажется, что я не могу получить событие, чтобы вызывать, когда DropDownList находится в Panel, на которую нацелен ModalPopupExtender.
Как я могу обойти это?