0

同じページに2つのDataPagerがあり、同じListViewにリンクされているという問題があります。「下部」または2番目のポケットベルが機能していないように見えることを除いて、すべてが正常に機能します。ページ番号は生成されますが、それらをクリックしても何も起こりません。「上部」ページャーの上に「下部」ページャーをコピーすると、そのページャーは機能しますが、その下のページャーは機能しません。最初に来るポケットベルだけが機能しているようです:

<asp:DataPager ID="dpPagerTop" runat="server" PagedControlID="lvOutput" QueryStringField="pageNumber">
    <Fields>
        <asp:NumericPagerField NextPageText="Next" PreviousPageText="Previous" />
    </Fields>
</asp:DataPager>

<asp:DataPager ID="dpPagerBottom" runat="server" PagedControlID="lvOutput" QueryStringField="pageNumber">
    <Fields>
        <asp:NumericPagerField NextPageText="Next" PreviousPageText="Previous" />
    </Fields>
</asp:DataPager>

<asp:ListView ID="lvOutput" runat="server" OnPagePropertiesChanged="lvOutput_PagePropertiesChanged">
    <LayoutTemplate>
        <asp:PlaceHolder id="itemPlaceholder" runat="server" />
    </LayoutTemplate>
    <ItemTemplate>
        <a href="<%# Eval("Link") %>" title="<%# Eval("Title") %>"><%# Eval("Title") %></a>
    </ItemTemplate>
</asp:ListView>


protected void Page_Load(object sender, EventArgs e)
{
    if (!Page.IsPostBack)
    {
        dpPagerTop.SetPageProperties(Request.QueryString["pageNumber"].ToString(), 25, false);
        dpPagerBottom.SetPageProperties(Request.QueryString["pageNumber"].ToString(), 25, false);

        lvOutput.DataSource = [datasource];
        lvOutput.DataBind();
    }
}


protected void lvOutput_PagePropertiesChanged(object sender, EventArgs e)
{
    lvOutput.DataBind();
}

アップデート:

これをもう少しいじくり回した後、SetPagePropertiesに正しいパラメーターがあれば、両方のページャーが機能することを確認しました。最初のパラメーターは結果を開始する数であり、2番目のパラメーターは表示する結果の数である必要があります。ただし、表示する番号が間違っています。正確に100のレコードがあり、1ページに25の結果を表示したいと思います。ハードコーディングした場合:

dpPagerTop.SetPageProperties(25, 25, true);
dpPagerBottom.SetPageProperties(25, 25, true);

これは結果の2ページ目であり、結果は26-50を示しています。ただし、下部のポケットベルは機能しません。

さて、ハードコーディングすると:

dpPagerTop.SetPageProperties(26, 25, true);
dpPagerBottom.SetPageProperties(26, 25, true);

どちらのポケットベルも正常に機能しますが、結果の数は27〜51になります。

誰かがこれを再現できますか、それは私を狂わせていますか?!?!?

更新2:

ListViewにバインドする前にページのプロパティを設定することで機能するようになったと思います。

4

2 に答える 2

2

1つのリストビューにバインドされたページ上の2つのデータページャーで同様の問題が発生しました。データページャーはそれぞれと同期されていませんでした。そのため、上部ページャーと下部ページャーを変更すると、ページャーが機能していないように見えます。この方法により、それらは軌道に戻ります。

 protected void ListView1_PagePropertiesChanging(object sender, PagePropertiesChangingEventArgs e)
    {
        DataPager1.SetPageProperties(e.StartRowIndex, e.MaximumRows, false);
        DataPager2.SetPageProperties(e.StartRowIndex, e.MaximumRows, false);
    }
于 2011-04-11T23:26:47.507 に答える
0

私はこれを理解したと思います。

まず、ページのプロパティを設定する前に、リストビューをデータバインドする必要があると言えます。

次に、SetPagePropertiesメソッドの最初のパラメーターを誤解していると思います。現在のページを設定するのではなく、このページのデータの最初のレコードを設定します。

これが私が使用しているHTMLです

<asp:DataPager ID="dpPagerTop" runat="server" PagedControlID="lvOutput" QueryStringField="pageNumber"
    PageSize="2">
    <Fields>
        <asp:NumericPagerField NextPageText="Next" PreviousPageText="Previous" />
    </Fields>
</asp:DataPager>
<asp:DataPager ID="dpPagerBottom" runat="server" PagedControlID="lvOutput" QueryStringField="pageNumber"
    PageSize="2">
    <Fields>
        <asp:NumericPagerField NextPageText="Next" PreviousPageText="Previous" />
    </Fields>
</asp:DataPager>

<asp:ListView ID="lvOutput" runat="server" OnPagePropertiesChanged="lvOutput_PagePropertiesChanged">
    <LayoutTemplate>
        <asp:PlaceHolder ID="itemPlaceholder" runat="server" />
    </LayoutTemplate>
    <ItemTemplate>
        <a href="Donation.aspx" title="<%# Eval("Type") %>">
            <%# Eval("id")%></a>
    </ItemTemplate>
</asp:ListView>

<asp:SqlDataSource ID="SqlDataSource1" runat="server" 
    ConnectionString="<%$ ConnectionStrings:LutheranAssistanceConnectionString %>" 
    SelectCommand="SELECT [Id], [RecipientId], [Type], [Reason] FROM [Donations]">
</asp:SqlDataSource>

これがコードビハインドのコードです

protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
            //bind the list view first
            lvOutput.DataSource = SqlDataSource1;
            lvOutput.DataBind();

            //the first parameter of SetPageProperties is not the page number 
            //it is index of the first record on the page
            //So we need to calculate the index based on the passed in page number.
            int pageNumber = Convert.ToInt32(Request["pageNumber"]);
            int recordNumber = pageNumber * dpPagerTop.PageSize;

            //now set first record
            dpPagerTop.SetPageProperties(recordNumber , 25, false); 
            dpPagerBottom.SetPageProperties(recordNumber , 25, false);
        }
    }

    protected void lvOutput_PagePropertiesChanged(object sender, EventArgs e)
    {
        lvOutput.DataBind();
    }

お役に立てれば

于 2009-09-15T20:34:56.923 に答える