【问题标题】:ASP.NET DataGrid and HoverMenu ExtenderASP.NET DataGrid 和 HoverMenu 扩展器
【发布时间】:2010-10-27 01:46:53
【问题描述】:

我有一个 ASP.NET DataGrid,我正在尝试向其中添加 HoverMenu Extender。网格标记如下:

<asp:datagrid id="dgrExisting" runat="server" autogeneratecolumns="false" cssclass="FormattedTable" onitemcommand="dgrExisting_ItemCommand" onitemdatabound="dgrExisting_ItemDataBound">
                <headerstyle cssclass="FormattedTableHeader">
                <alternatingitemstyle cssclass="FormattedTableAltRow"></alternatingitemstyle>
                <columns>
                    <asp:boundcolumn datafield="UrlId" visible="false"></asp:boundcolumn>
                    <asp:boundcolumn datafield="MonitorUrl" headertext="Url"></asp:boundcolumn>
                    <asp:boundcolumn datafield="LastChecked" headertext="Last Checked"></asp:boundcolumn>
                    <asp:boundcolumn datafield="NextCheck" headertext="Next Check" visible="false"></asp:boundcolumn>
                    <asp:boundcolumn datafield="LastLoadTime" headertext="Last Load Time&lt;br&gt;&lt;/asp&gt;(Milliseconds)">
                    <asp:boundcolumn datafield="LastStatus" headertext="Last Status"></asp:boundcolumn>
                    <asp:templatecolumn>
                        <itemtemplate>
                            <asp:panel id="pnlPopupMenu" runat="server">
                                <div style="border: 1px outset white; padding: 2px;">
                                    <div><asp:linkbutton id="lnkReport" runat="server" commandname="Report" text="View Reports"></asp:linkbutton></div>
                                    <div><asp:linkbutton id="lnkDelete" runat="server" commandname="Delete" text="Delete"></asp:linkbutton></div>
                                    <asp:confirmbuttonextender id="cbeNewDelete" runat="server" targetcontrolid="lnkDelete" confirmtext="Are you sure you want to remove this URL?"></asp:confirmbuttonextender>
                                </div>
                            </asp:panel>
                            <asp:hovermenuextender id="hoverMenu" runat="server" popupcontrolid="pnlPopupMenu" popupposition="Right" hovercssclass="popupHover" targetcontrolid="pnlPopupMenu" popdelay="50"></asp:hovermenuextender>
                        </itemtemplate>
                    </asp:templatecolumn>
                </asp:boundcolumn>
            </columns>
</asp:datagrid>

在 ItemDataBound 事件中,我正在设置 ID 以使其适用于整行,为此我使用以下内容:

protected void dgrExisting_ItemDataBound(object sender, DataGridItemEventArgs e)
{
    if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
    {
        AjaxControlToolkit.HoverMenuExtender oHoverMenu = (AjaxControlToolkit.HoverMenuExtender)e.Item.FindControl("hoverMenu");
        e.Item.ID = e.Item.ItemIndex.ToString();
        oHoverMenu.TargetControlID = e.Item.ID;
    }
}

实际上,菜单显示,但是,单击链接按钮实际上不会回传到服务器,从而允许处理项目命令。如果我禁用悬停菜单扩展器,按钮会按预期工作。

我错过了什么?

【问题讨论】:

    标签: asp.net datagrid ajaxcontroltoolkit


    【解决方案1】:

    我没有尝试在后面的代码中实现行为,而是内联了链接...

    <itemtemplate>
        <asp:label id="lblOptions" runat="server">Options</asp:label><img src="../Images/RightArrow.png" alt="Show Menu" />
    
        <asp:panel id="pnlMenu" runat="server" cssclass="popupMenu">
            <div class="popupItem"><a href="Uploader.aspx?Action=Copy&Id=<%#Eval("Id")%>">Copy</a></div>
            <div class="popupItem"><a href="Uploader.aspx?Action=Version&Id=<%#Eval("VersionId")%>">Upload New Version</a></div>
            <div class="popupItem"><a href="VersionBrowser.aspx?id=<%#Eval("Id")%>">View Versions</a></div>
        </asp:panel>
    
        <cc1:hovermenuextender id="hme" runat="server"
             hovercssclass="popupHover"
             popupcontrolid="pnlMenu"
             targetcontrolid="lblOptions"/>
    </itemtemplate>
    

    【讨论】:

    • 我可能不得不尝试这种方式。我试图避免有一个完全可见的列,但如果没有,这行得通。
    猜你喜欢
    • 2012-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-08
    • 1970-01-01
    • 2011-01-02
    • 1970-01-01
    • 2016-07-22
    相关资源
    最近更新 更多