UpdatePanel 的 CollectionPager 问题

Posted

技术标签:

【中文标题】UpdatePanel 的 CollectionPager 问题【英文标题】:CollectionPager Problem With UpdatePanel 【发布时间】:2011-08-24 09:52:34 【问题描述】:

我的collectionpager 和repeater 有问题。当我加载页面时,collectionpager 工作正常。但是当我单击搜索按钮并绑定新数据,单击第 2 页链接时,它正在触发 page_load 事件处理程序并再次将所有数据带回......注意:全部控件位于 UpdatePanel 中。

 protected void Page_Load(object sender, EventArgs e)
if (!IsPostBack)

    kayit_getir("SELECT Tbl_Icerikler.ID,Tbl_Icerikler.url,Tbl_Icerikler.durum,Tbl_Icerikler.baslik,Tbl_Icerikler.gunc_tarihi,Tbl_Icerikler.kayit_tarihi,Tbl_Icerikler.sira,Tbl_Kategoriler.kategori_adi FROM Tbl_Icerikler,Tbl_Kategoriler where Tbl_Kategoriler.ID=Tbl_Icerikler.kategori_id ORDER BY Tbl_Icerikler.ID DESC,Tbl_Icerikler.sira ASC");


public void kayit_getir(string SQL)
SqlConnection baglanti = new SqlConnection(f.baglan());
baglanti.Open();
SqlCommand komut = new SqlCommand(SQL, baglanti);
SqlDataAdapter da = new SqlDataAdapter(komut);
DataTable dt = new DataTable();
da.Fill(dt);
if (dt.Rows.Count > 0)

    CollectionPager1.DataSource = dt.DefaultView;
    CollectionPager1.BindToControl = Liste;
    Liste.DataSource = CollectionPager1.DataSourcePaged;

else

   kayit_yok.Text = "<br /><span class='message information'>Kayıt bulunamadı.</span>";

da.Dispose();
baglanti.Close();
CollectionPager1.DataBind();
Liste.DataBind();


protected void search_Click(object sender, EventArgs e)
string adi = f.temizle(baslik.Text);
string durum = Durum.SelectedValue;
string kayit_bas_t = kayit_bas_tarih.Text;
string kayit_bit_t = kayit_bit_tarih.Text;
string kategori = kategori_adi.SelectedValue;


string SQL = "SELECT Tbl_Icerikler.ID,Tbl_Icerikler.url,Tbl_Icerikler.durum,Tbl_Icerikler.baslik,Tbl_Icerikler.gunc_tarihi,Tbl_Icerikler.kayit_tarihi,Tbl_Icerikler.sira,Tbl_Kategoriler.kategori_adi FROM Tbl_Icerikler,Tbl_Kategoriler where Tbl_Kategoriler.ID=Tbl_Icerikler.kategori_id and";
if (adi != "")

    SQL = SQL + " Tbl_Icerikler.baslik LIKE '%" + adi + "%' and";


if (kategori != "")

    SQL = SQL + " Tbl_Icerikler.kategori_id=" + kategori + " and";


if (durum != "")

    SQL = SQL + " Tbl_Icerikler.durum='" + durum + "' and";


if (kayit_bas_t != "")

    SQL = SQL + " (Tbl_Icerikler.kayit_tarihi>'" + kayit_bas_t + "') and";


if (kayit_bit_t != "")

    SQL = SQL + " (Tbl_Icerikler.kayit_tarihi<'" + kayit_bit_t + "') and";


SQL = SQL.Remove(SQL.Length - 3, 3);
SQL = SQL + " ORDER BY sira ASC,ID DESC";

try

    kayit_getir(SQL);

catch  
Recursive(0, 0);

【问题讨论】:

你研究过 Massimiliano Peluso 的解决方案吗? 【参考方案1】:

代码非常糟糕,您应该彻底检查所有代码。 问题是每次执行页面加载时它都会再次初始化您查询到默认的(没有过滤器的)您应该找到一种方法来存储在您订购/过滤数据时执行最后一个查询的地方。 无论如何,网络上有很多示例显示您正在尝试实现的目标

以下只是其中之一

http://www.codeproject.com/KB/webforms/ExtendedRepeater.aspx

【讨论】:

【参考方案2】:

试试这个EnableViewState="false"

【讨论】:

【参考方案3】:

您必须在搜索时再次绑定CollectionPager

【讨论】:

以上是关于UpdatePanel 的 CollectionPager 问题的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET使用UpdatePanel实现AJAX

ScriptManager和UpdatePanel用法 (ajax)

找不到 ID 为“xxx”的 UpdatePanel。如果它是动态更新的,那么它必须在另一个 UpdatePanel 中

UpdatePanel AsyncPostBackTrigger PostBackTrigger 区别

如何推迟加载 UpdatePanel 内容,直到页面呈现后?

UpdatePanel 异常处理