使用ListView

时间:2019-02-18 22:13:25

标签: c# listview invalidoperationexception datapager

我的页面上有一个工作的listview项目,我想在上面添加一个datapager。但是我在databind上收到此InvalidOperationException错误(在CS的页面加载部分):

  

“ ID为'lv_oylanacaksayfalar'的ListView必须具有实现ICollection的数据源,或者如果AllowPaging为true,则可以执行数据源分页。”

每当我放下datapager时,它都能正常工作。我什至没有在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();
    }

0 个答案:

没有答案