我的页面上有一个工作的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();
}