【问题标题】:How do I trap the SelectedIndexChange event of a DropDownList that is in a ModalPopupExtender extender in a Gridview?如何捕获 Gridview 的 ModalPopupExtender 扩展器中的 DropDownList 的 SelectedIndexChange 事件?
【发布时间】:2011-03-09 14:04:39
【问题描述】:

我有一个 GridView,它数据绑定到通用对象列表。每行都有一个项目,该项目必须记入不同的帐户。每个项目都有一个属性,它是被计费的帐户和金额的通用列表 - 该“子列表”显示在嵌入 GridView 列之一的 ListView 中。

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

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

这里尝试展示代码是怎样的:

<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 所针对的面板中时,我似乎无法触发事件。

我该如何解决这个问题?

【问题讨论】:

    标签: asp.net ajax drop-down-menu modalpopupextender


    【解决方案1】:

    不确定这是否是您所追求的,但是将 AutoPostBack="true" 属性包含到下拉列表中怎么样?

    【讨论】:

    • 我的问题(使用该解决方案)在于找到 DropDownList 以便我可以获得结果 - 必须获得正确的级联 Control.FindControl("nextcontrol") 语句序列。现在我的问题是让弹出面板更新以显示在 DropDownList 索引更改时刚刚加载到其中的信息。我想我必须将 ModalPopupExtender 引用的 Panel 更改为 UpdatePanel。
    猜你喜欢
    • 1970-01-01
    • 2015-10-23
    • 2012-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-21
    相关资源
    最近更新 更多