4

ページングを使用し、データのソースとして LinqDataSource を使用して、Gridview に表示されるアイテムの合計行数を取得する際に問題が発生しています。

私はいくつかのアプローチを試しました:

protected void GridDataSource_Selected(object sender, LinqDataSourceStatusEventArgs e)  
{  
    totalLabel.Text = e.TotalRowCount.ToString();  
}

毎回 -1 を返します。

protected void LinqDataSource1_Selected(object sender, LinqDataSourceStatusEventArgs e)  
{  
    System.Collections.Generic.List<country> lst  = e.Result as System.Collections.Generic.List<country>;  
    int count = lst.Count;  
}

合計ではなく、現在のページのカウントのみが表示されます。

他の提案はありますか?

4

5 に答える 5

3

これらのイベントで返される LinqDataSourceEventArgs は、次の場合に -1 を返します。

データ変更操作中に LinqDataSourceStatusEventArgs オブジェクトが作成された場合は -1。AutoPage を true に設定し、RetrieveTotalRowCount を false に設定して、カスタマイズされたページングを有効にした場合は -1。

詳細については、ここを確認してください- 一番下の表には、行数を元に戻すために設定するさまざまなプロパティが示されていますが、AutoPage および AllowPage プロパティを両方とも true または両方とも false に設定する必要があるようです。

上記のリンクの表と提供する例から判断すると、Autopage は false に設定されていますが、AllowPaging は true に設定されているため、ページ内の行数が返されます。

HTH

于 2008-08-26T10:54:25.427 に答える
0

ええと、私はすでにAutoPageとAllowPagingをtrueに設定しています。デバッグモードで値をチェックすることにより、RetrieveTotalRowCountがtrueに設定されていることを確認しました(値を変更する場所が見つかりませんでした)。

そしてそれはまだ-1を返します。

足りないのは:

-1データ変更操作中にLinqDataSourceStatusEventArgsオブジェクトが作成された場合。

これが何を意味するのかよくわかりません。LinqDataSourceの修正バージョンを使用して、カスタムフィルタリングを有効にしているため、問題が発生する可能性があります。一方、デバッグモードをいじりながら、arguments.TotalRowCountの値を確認することができました。これは正しかったです。ただし、Selectedイベントで出力される値は常に-1です。

于 2008-08-26T15:23:41.897 に答える
0

私は同じ問題で立ち往生していました。次のコード行で問題を解決しました

protected void LinqDataSourcePoints_Selected(object sender, LinqDataSourceStatusEventArgs e) { totalRecords = (e.Result as List).Count; }

説明: 1-e.Result をデータ ソースとして解析します。2-カウントを取得します。

私にとって完璧に機能します。

于 2010-07-27T06:04:07.683 に答える
0

TotalRowCount プロパティは、AutoPage および AllowPaging の特定の値に対してのみ有効です。それらは両方とも真(あなたの場合)または両方とも偽でなければなりません。

TotalRowCount プロパティの説明については、次のページを参照してください。

http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.linqdatasourcestatuseventargs.totalrowcount.aspx

于 2008-08-26T11:00:06.320 に答える
0

これを試してみてください。テストしたところ、すべての行が返されます。

  protected void LinqDataSource1_Selecting(object sender, LinqDataSourceStatusEventArgs e)
        {
           System.Collections.Generic.List<country> lst  = e.Result as System.Collections.Generic.List<country>;

           int count = lst.Count;
        }

イベントが「選択中」であることを確認してください

于 2010-07-27T19:56:10.003 に答える