InvalidOperationException на asp: DataPager с ListView - PullRequest
0 голосов
/ 19 февраля 2019

У меня есть рабочий элемент списка на моей странице, и я хотел добавить на него страницу данных.Но я получаю эту ошибку InvalidOperationException при привязке данных (в части загрузки страницы cs):

"ListView с идентификатором 'lv_oylanacaksayfalar' должен иметь источник данных, который либо реализует ICollection, либо может выполнять разбиение на страницы источника данных, если AllowPagingэто правда. "

Всякий раз, когда я уронил страницу данных, он работает нормально.Я даже сделал повторную привязку данных на PagePropertiesChanging, все еще не повезло.

Вот мой код ASP:

<asp:ListView ID="lv_oylanacaksayfalar" runat="server" OnItemCommand="lv_oylanacaksayfalar_ItemCommand" OnPagePropertiesChanging="lv_oylanacaksayfalar_PagePropertiesChanging">
            <LayoutTemplate>
                <table class="tablewide" style="width: 100%">
                    <tr>
                        <td class="tableheader" style="width: 50px">ID NO</td>
                        <td class="tableheader" style="width: 400px">Sayfa Metni</td>
                        <td class="tableheader" style="width: 110px">1. Seçenek</td>
                        <td class="tableheader" style="width: 110px">2. Seçenek</td>
                        <td class="tableheader">Anlık Puan</td>
                        <td class="tableheader" style="width: 60px">Seçim</td>
                    </tr>
                    <asp:PlaceHolder ID="ItemPlaceHolder" runat="server"></asp:PlaceHolder>
                </table>
            </LayoutTemplate>
            <ItemTemplate>
                <tr>
                    <td><%# Eval("ID") %></td>
                    <td><%# Eval("Metin") %></td>
                    <td><%# Eval("Secenek1") %></td>
                    <td><%# Eval("Secenek2") %></td>
                    <td><%# Eval("OylamaPuani") %></td>
                    <td>
                        <asp:LinkButton class="buttonreadthis" ID="lbtn_oyver" runat="server" CommandName="oyver" CommandArgument='<%# Eval("ID")+","+Eval("UstIcerikID") %>'>OY VER</asp:LinkButton></td>
                </tr>
            </ItemTemplate>
            <EmptyDataTemplate>
                <%--Geri Gitmeli Kod lazım oldu, şöyle çözdüm--%>
                <%--stackoverflow.com/questions/14037870/hyperlink-to-go-back-to-previous-page-in-asp-net--%>
                Henüz bir içerik eklenmemiş. <a class="simplelinkbutton" href='javascript:history.go(-1)'>Önceki sayfaya gidip</a> siz bir şeyler yazmak ister misiniz?
            </EmptyDataTemplate>
        </asp:ListView>
        <asp:DataPager ID="lv_oylanacaksayfalar_pager" runat="server" PagedControlID="lv_oylanacaksayfalar" PageSize="5">
            <Fields>
                <asp:NumericPagerField ButtonType="Link" />
            </Fields>
        </asp:DataPager>

Вот код .CS:

protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            if (Request.QueryString.Count != 0)
            {
                if (Session["uye"] != null)
                {
                    Uyeler u = ((Uyeler)Session["uye"]);
                    int id = Convert.ToInt32(Request.QueryString["stoid"]);
                    int icerik = Convert.ToInt32(Request.QueryString["conid"]);
                    int secim = Convert.ToInt32(Request.QueryString["chose"]);
                    bool chose = secim == 1 ? true : false;
                    //Birden fazla lambda ifadesi lazım oldu, şöyle çözdüm:
                    //stackoverflow.com/questions/1748047/multiple-where-clauses-in-lambda-expressions

                    if (data.HaftalikOylandiMi(u.ID, icerik, secim))
                    {
                        lv_oylanmissayfa.DataSource = data.IcerikListele().Where(s => s.ID == data.HangisiOylandi(u.ID, icerik, secim));
                        lv_oylanmissayfa.DataBind();
                    }

                    lv_oylanacaksayfalar.DataSource = data.IcerikListele().Where(i => i.Durum == 2 && i.HikayeID == id && i.Secilen == chose && i.UstIcerikID == icerik);
                    lv_oylanacaksayfalar.DataBind();

                }
                else
                {
                    Response.Redirect("Cikis.aspx");
                }
            }
            else
            {
                Response.Redirect("Default.aspx");
            }
        }
    }

protected void lv_oylanacaksayfalar_PagePropertiesChanging(object sender, PagePropertiesChangingEventArgs e)
    {
        int id = Convert.ToInt32(Request.QueryString["stoid"]);
        int icerik = Convert.ToInt32(Request.QueryString["conid"]);
        int secim = Convert.ToInt32(Request.QueryString["chose"]);
        bool chose = secim == 1 ? true : false;
        lv_oylanacaksayfalar_pager.SetPageProperties(e.StartRowIndex, e.MaximumRows, false);
        lv_oylanacaksayfalar.DataSource = data.IcerikListele().Where(i => i.Durum == 2 && i.HikayeID == id && i.Secilen == chose && i.UstIcerikID == icerik);
        lv_oylanacaksayfalar.DataBind();
    }
...