Frage

Von allem, was ich gelesen habe, schien es, dass das Hinzufügen von Funkruf zu einem Listview-Steuerelement sollte tot einfach sein, aber es funktioniert nicht für mich. Nach dem Hinzufügen der Listview und Datapager-Steuerelemente zum Formular und verdrahten sie zusammen, ich bin immer sehr merkwürdiges Verhalten. Die Datapager begrenzt richtig die Seitengröße Listview, aber die Paging-Schaltflächen klicken beeinflusst nicht die Listview überhaupt. Die Paging-Tasten scheinen zu denken, sie tun, sie sind Job, als die letzte Taste deaktiviert ist, wenn Sie zur letzten Seite gehen, etc., aber das Listview ändert sich nie. Auch dauert es zwei Klicks auf den Datapager, um es etwas zu tun, das heißt, auf klicken Last einmal nichts tut, aber es ein zweites Mal bewirkt, dass die Datapager zu reagieren, als ob die letzte Seite ist jetzt ausgewählt klicken.

Das einzige, was ich denken kann, ist, dass ich die Datasource zur Laufzeit ist Bindung (zu einem LINQ-Objekt), kein LinqDataSource-Steuerelement oder irgendetwas verwendet wird. Hat jemand dieses Problem gesehen? Mache ich etwas falsch? Hier ist der Code verwende ich:

<asp:DataPager ID="HistoryDataPager" runat="server" PagedControlID="HistoryListView" PageSize="10">
    <Fields>
        <asp:NextPreviousPagerField ButtonType="Button" ShowFirstPageButton="true" ShowLastPageButton="true" />
    </Fields>
</asp:DataPager>

<asp:ListView ID="HistoryListView" runat="server">
    ...
</asp:ListView>

Im Code-behind:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

    If Not IsPostBack Then
        HistoryListView.DataSource = From x in myContext.myTables ...
        DataBind()
    End If

End Sub
War es hilfreich?

Lösung

Werfen Sie einen Blick auf die ListViewPagedDataSource.

private ListViewPagedDataSource GetProductsAsPagedDataSource(DataView dv)
{
// Limit the results through a PagedDataSource
ListViewPagedDataSource pagedData = new ListViewPagedDataSource();
pagedData.DataSource = dv;
pagedData.MaximumRows = dv.Table.Rows.Count;
pagedData.TotalRowCount = dpTop.PageSize;

if (Request.QueryString[dpTop.QueryStringField] != null)
  pagedData.StartRowIndex = (Convert.ToInt32(Request.QueryString[dpTop.QueryStringField]) - 1) * dpTop.PageSize;
else
  pagedData.StartRowIndex = 0;

return pagedData;
}

Obwohl, ich habe ein Problem auf die letzte Seite angezeigt wird. Der Datapager springt zurück auf die erste Seite, aber die angezeigten Daten die letzte Seite.

Andere Tipps

Wir müssen wieder in OnPreRender Ereignislistenansicht Databind.

protected override void OnPreRender(EventArgs e)
        {
            ListView1.DataBind();
            base.OnPreRender(e);
        }

- Update

Nach der Arbeit auf ein paar Listenansichten mit asp.net Ajax, sah ich eine Lösung, die mehr Sinn als die oben macht man. Sie würden normalerweise Daten binden Listenansicht auf Seite Load-Methode oder eine Schaltfläche Click-Ereignishandler und wenn es die Daten nach zurück Bindung oben in dem Problem, wie wäre verloren. So müssen wir Daten binden wieder auf Seite Eigenschaften Event-Handler für die Listenansicht geändert.

ListView_PagePropertiesChanged(object sender, EventArgs e)
{
ListView.DataSource=someDatasource;
ListView.DataBind()
}

One More Lösung , seine einfache, Holen Sie einfach "ID" in "QUERY-STRING" aus der Datenbank, ist es nun an den Pager Control Eigenschaft Einstellung als [QueryStringField = "ID"] wie:

<asp:DataPager ID="DataPagerProducts" runat="server" QueryStringField="ID" PageSize="3">
                            <Fields>
                                <asp:NextPreviousPagerField ShowFirstPageButton="True" ShowNextPageButton="False" />
                                <asp:NumericPagerField />
                                <asp:NextPreviousPagerField ShowLastPageButton="True" ShowPreviousPageButton="False" />
                            </Fields>
                        </asp:DataPager>

. Hinweis: , wenn nicht woking, dann setzt auch [ PagedControlID="ListView_Name" ]

Binden Sie die Listenansicht an Datapager-Veranstaltung vorge macht nicht an Seite zu laden. Bitte beachten Sie die Lösung hier

Auch wenn die Datenquelle des Listview geändert wird (zum Beispiel, wenn die Daten anhand der Suchparameter angezeigt werden), nicht vergessen der Pager der Datenquelle aktualisiert wird jedes Mal zurückgesetzt werden. Mit einem Listview ist dies nicht so einfach, wie einige andere datengebundene Steuerelemente (z Gridview):

private void ResetListViewPager()
{
    DataPager pager = (DataPager)ListViewMembers.FindControl("DataPager1");
    if (pager != null)
    {
        CommandEventArgs commandEventArgs = new CommandEventArgs(DataControlCommands.FirstPageCommandArgument, "");
        // MAKE SURE THE INDEX IN THE NEXT LINE CORRESPONDS TO THE CORRECT FIELD IN YOUR PAGER
        NextPreviousPagerField nextPreviousPagerField = pager.Fields[0] as NextPreviousPagerField;
        if (nextPreviousPagerField != null)
        {
            nextPreviousPagerField.HandleEvent(commandEventArgs);
        }

        // THIS COMMENTED-OUT SECTION IS HOW IT WOULD BE DONE IF USING A NUMERIC PAGER RATHER THAN A NEXT/PREVIOUS PAGER
        //commandEventArgs = new CommandEventArgs("0", "");
        //NumericPagerField numericPagerField = pager.Fields[0] as NumericPagerField;
        //if (numericPagerField != null)
        //{
        //    numericPagerField.HandleEvent(commandEventArgs);
        //}
    }
}
<asp:ListView ID="ListView1" runat="server" DataSourceID="sdsImages">
    <ItemTemplate>
        <div class="photo sample12">
                <asp:Image ID="img_Galerie" runat="server" ImageUrl='<%# "~/imageHandler.ashx?ID=" + Eval("ImageID") %>' />
        </div>
    </ItemTemplate>
</asp:ListView>
<asp:DataPager ID="DataPager1" runat="server" PagedControlID="ListView1" PageSize="3" QueryStringField="ImageID">
    <Fields>
        <asp:NextPreviousPagerField ShowFirstPageButton="True" ShowNextPageButton="False" />
        <asp:NumericPagerField />
        <asp:NextPreviousPagerField ShowLastPageButton="True" ShowPreviousPageButton="False" />
    </Fields>
</asp:DataPager>
<asp:SqlDataSource ID="sdsImages" runat="server"
    ConnectionString="<%$ ConnectionStrings:DBCS %>"
    SelectCommand="SELECT ImageID FROM  Images ">

versuchen Sie dies:

protected void ListView1_PagePropertiesChanging(object sender, PagePropertiesChangingEventArgs e)
{
    DataPager1.SetPageProperties(e.StartRowIndex, e.MaximumRows, false);
    ListView1.DataSource = productList;
    ListView1.DataBind();
    DataPager1.DataBind();
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top