簡體   English   中英

將DataPager與Repeater和SqlDataReader一起使用

[英]Using DataPager with Repeater and SqlDataReader

是否可以通過NextPrev進行自定義分頁,並在Repeater之間進行頁碼設置(例如GridView )? 我發現了一些東西,但僅適用於10頁。 我想要的是這樣的,類似Google的用於分頁的內容:

< 1 2 3 4 ... 15 >

我發現擴展Repeater讓我使用DataPager,在這里進行解釋: CodeProject:擴展Repeater以支持DataPager但是當我使用SqlDataReader作為DataSource ,會遇到此錯誤:

Type 'System.Data.SqlClient.SqlDataReader' in Assembly 
    'System.Data, Version=4.0.0.0, Culture=neutral, 
    PublicKeyToken=b77a5c561934e089' is not marked as serializable.

這是我的代碼:

public bool ListBooksByCat(DataPagerRepeater.DataPagerRepeater repeater)
{
    List<string> selection = new List<string>();
    Dictionary<string, object> clause = new Dictionary<string, object>();
    clause.Add("IsValid", true);
    SqlDB myDb = new SqlDB(this.Connection);

    try
    {
        SqlDataReader reader = myDb.Retrive(this.TableName, selection, clause, "bookid", true);
        repeater.DataSource = reader;
        repeater.DataBind();
        reader.Close();
        return true;
    }
    catch (Exception e)
    {
        //logging errors
        return false;
    }
}

Note :DataPagerRepeater.DataPagerRepeater是在鏈接的文章中內置的。

而不是綁定到SqlReader,您應該將控件綁定到DataTable或其他一些使數據脫機的集合(在綁定過程中,DataReader始終處於連接模式)。 由於SQLDataReader是與資源相關的對象,並且無法將任何與資源相關的對象“傳遞”給客戶端,因此出現此錯誤。

我將SqlDataReader復制到DataTable然后將轉發器綁定到它:

    SqlDataReader reader = myDb.Retrive(this.TableName, selection, clause, "bookid", true);
    DataTable dt = new DataTable();
    dt.Load(reader);
    reader.Close();
    repeater.DataSource = dt;
    repeater.DataBind();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM