Как перехватить событие SelectedIndexChange DropDownList, который находится в расширителе ModalPopupExtender в Gridview? - PullRequest
0 голосов
/ 09 марта 2011

У меня есть 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:&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).

«Желаемое поведение» - возвращаться к CodeBehind, когда пользователь нажимает на другую учетную запись в DropDownList, чтобы я мог заполнить метку, котораясообщает им, сколько денег осталось на счете (так как они должны ввести сумму в текстовое поле на этой панели).

Может показаться, что ModalPopupExtender предотвращает запуск события OnSelectedIndexChanged DropDownList.У меня нет проблем с тем, чтобы это произошло с DropDownLists, которые находятся в EditTemplate GridViewRow - просто кажется, что я не могу получить событие, чтобы вызывать, когда DropDownList находится в Panel, на которую нацелен ModalPopupExtender.

Как я могу обойти это?

1 Ответ

1 голос
/ 09 марта 2011

Не уверен, что это то, что вам нужно, но как насчет включения свойства AutoPostBack = "true" в выпадающий список?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...