2

DBからデータを取得するクラスがあります。

[Table(Name = "Ilanlar")]
public class Ilan
{

    [Column(Name="ilan_id" ,IsPrimaryKey = true)]
    public int M_ilan_id;

    [Column(Name="refVerenUser_id")]
    public int M_refVerenUser_id;
}

そして、私はデータをバインドしています。データは上記のクラスを介してdbから取得されます。

    private void ItemsGet()
    {
        PagedDataSource objPds = new PagedDataSource();
        objPds.DataSource =  f_IlanlariGetir(CurrentPage);
        objPds.AllowPaging = true;
        objPds.PageSize = 3;

        objPds.CurrentPageIndex = CurrentPage;

        rptIlanlar.DataSource = objPds;  //rptIlanlar = asp:Repeater
        rptIlanlar.DataBind();
    }

    protected void Page_Load(object sender, EventArgs e)
    {
        ItemsGet();
    }

    private System.Collections.IEnumerable f_IlanlariGetir(int p)
    {
        Context context = new Context(DAO.dbYaban.ConnectionString);

        return context.GetTable<Ilan>();
    }

結果はIEnumerableですが、DataSetのようなものが必要です。このエラーが発生します:

ICollectionを実装していないデータソースのカウントを計算できません。

私はこのエラーについての良い説明を見つけました、それは次のとおりです:

グリッドが自動ページングを実行するには、基盤となるデータソースがICollectionインターフェイスをサポートしている必要があります。ICollectionには、Countプロパティを実装するためのクラスが必要です。ArrayListとDataViewはどちらもインターフェイスをサポートしているため、これらをDataSourcesとして使用できます。他のクラスはIEnumerableインターフェイスのみをサポートします。これにより、それらをデータソースとして使用できますが、ページングされたデータソースとしては使用できません。SqlDataReaderは、そのようなクラスの例です。参照

しかし、linqの結果を使用してリピーターをSQLテーブルにバインドする必要があります。私は何をすべきか?

4

1 に答える 1

1

クエリに直接バインドするのではなく、次のことを試してください。

return context.GetTable<Ilan>().ToList();
于 2010-01-31T12:02:44.020 に答える