【问题标题】:Find ListView, DataPager, ObjectDataSource in Different Content Controls在不同的内容控件中查找 ListView、DataPager、ObjectDataSource
【发布时间】:2012-05-03 01:48:01
【问题描述】:

我发现很少有事情像试图在不同的内容控件中找到我的 ASP .NET 控件那样令人沮丧。对于布局,我需要将 ListView 放在一个内容控件中,将 DataPager 和 ObjectDataSource 放在不同的内容控件中。

<asp:Content ID="cPagedContent" ContentPlaceHolderID="cphPagedContent" runat="Server">
<asp:MultiView ID="mvPagedContent" runat="server">
    <asp:View ID="mvPagedContentDefault" runat="server">
        <asp:ListView ID="lvPagedContent" runat="server" ItemPlaceholderID="itemPlaceholder">
            <LayoutTemplate>
                <asp:PlaceHolder ID="itemPlaceholder" runat="server" />
            </LayoutTemplate>
            <ItemTemplate>
                <div class="hp-post-even">
                    <h2>
                        <a href="<%# Eval("QuickLink") %>">
                            <%# Eval("Title") %></a></h2>
                    <p>
                        <%# Eval("Html") %></p>
                </div>
            </ItemTemplate>
            <AlternatingItemTemplate>
                <div class="hp-post">
                    <h2>
                        <a href="<%# Eval("QuickLink") %>">
                            <%# Eval("Title") %></a></h2>
                    <p>
                        <%# Eval("Html") %></p>
                </div>
            </AlternatingItemTemplate>
        </asp:ListView>
    </asp:View>
    <asp:View ID="mvPagedContentTaxonomy" runat="server">
    </asp:View>
    <asp:View ID="mvPagedContentSearch" runat="server">
    </asp:View>
</asp:MultiView>
</asp:Content>
<asp:Content ID="cAboveFooter" ContentPlaceHolderID="cphAboveFooter" runat="Server">
<asp:MultiView ID="mvPager" runat="server">
    <asp:View ID="mvPagerDefault" runat="server">
        <asp:DataPager ID="dpContentPager" runat="server"
            PageSize="6">
            <Fields>
                <asp:NextPreviousPagerField ButtonType="Link" FirstPageText="[First]" PreviousPageText="[Prev]"
                    ShowNextPageButton="false" ShowLastPageButton="false" RenderDisabledButtonsAsLabels="true"
                    ShowFirstPageButton="true" />
                <asp:NumericPagerField ButtonCount="4" />
                <asp:NextPreviousPagerField ButtonType="Link" ShowFirstPageButton="false" ShowPreviousPageButton="false"
                    NextPageText="[Next]" LastPageText="[Last]" RenderDisabledButtonsAsLabels="true"
                    ShowLastPageButton="true" />
            </Fields>
        </asp:DataPager>
        <asp:ObjectDataSource ID="odsContent" runat="server" EnablePaging="true" MaximumRowsParameterName="maximumRows"
            SelectCountMethod="GetContentCount" SelectMethod="GetContent" StartRowIndexParameterName="startRowIndex" />
    </asp:View>
    <asp:View ID="mvPagerTaxonomy" runat="server">
    </asp:View>
</asp:MultiView>
</asp:Content>

在我的 C# 文件中,我可以找到 ListView 控件。但我似乎找不到与 ListView 关联的 DataPager 和 ObjectDataSource。

这是来自 Page_Load 的 sn-p。

    ListView listView;
    ObjectDataSource objectDataSource;
    DataPager dataPager;

    listView = mvPagedContentDefault.Controls[0].FindControl("lvPagedContent") as  ListView;

    objectDataSource = mvPagerDefault.Controls[0].FindControl("odsContent") as ObjectDataSource;
    objectDataSource.TypeName = this.GetType().AssemblyQualifiedName;
    listView.DataSourceID = objectDataSource.ID;

    dataPager = mvPagerDefault.Controls[0].FindControl("dpContentPager") as DataPager;
    dataPager.PagedControlID = listView.ID;

关于如何找到这些傻瓜有什么想法吗?这让我有点发疯了。

【问题讨论】:

    标签: c# asp.net listview objectdatasource findcontrol


    【解决方案1】:

    我不明白问题出在哪里。您引用了MultiView 控件,不是吗?它有一个属性Views,它返回MultiView 控件中View 控件的集合。 DataPagerObjectDataSource 都在第一个视图中。

    var dpContentPager = (DataPager)mvPager.Views[0].FindControl("dpContentPager");
    var odsContent = (ObjectDataSource)mvPager.Views[0].FindControl("odsContent");
    

    来自MSDN

    使用 PagedControlID 属性来指定控件的 ID 包含将由 DataPager 控件分页的数据。 该 指定控件必须实现IPageableItemContainer接口 并且必须使用与 DataPager 控件相同的命名容器。一个 您可以指定的控件示例是 ListView 控件。

    您可以尝试创建一个继承自 DataPager 的自定义寻呼机,该寻呼机会覆盖 FindPageableItemContainer 以查找 ListView,即使它位于不同的 NamingContainer 中。

    看看这里:http://forums.asp.net/t/1458342.aspx/1

    【讨论】:

    • @williamdnapier:ListView 和 DataPager 位于不同的 NamingContainers 中。这是不允许的(请参阅我的编辑)。
    • @williamdnapier:你有没有看到我刚刚再次编辑了答案?因此,您要么需要创建自定义 DataPager,要么更改视图。
    • @williamdnapier:如果“注释掉”方法不起作用(我担心),您可以尝试从给定的容器控件开始在FindPageableItemContainer 中使用recursive FindControl approach。当然,只有在只有一个 ID 为 lvPagedContent 的控件时才有效。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多