1

グリッドでページングを使用しようとしています。次のメソッドは、テーブル内のすべてをグリッドに渡します。startとlimitを計算するにはどうすればよいですか。ここで、startはページ番号で、limitはページあたりのレコード数です。基本的に、extjsツールバーは、要求に応じて開始と制限を返すためのメソッドを探します。私は非常に多くの解決策を試しましたが、うまくいかないようです。だから私はこれを簡単な方法でここに出しているのです。

これは私のC#の終わりです

public string myRecord(int start, int limit)
{
    List<gridPaging> result = new List<gridPaging>();
    using (SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["ApplicationServices2"].ConnectionString))
    {
        SqlCommand cmd = con.CreateCommand();

        cmd.CommandText = "SELECT * FROM myTable ORDER BY Q1";
        con.Open();
        SqlDataReader reader = cmd.ExecuteReader();
        while (reader.Read())
        {
            gridPaging gp = new gridPaging();

            gp.Column1 = reader["Column1"].ToString().Trim();
            gp.Column2 = reader["Column2"].ToString().Trim();
            gp.Column3 = reader["Column3"].ToString().Trim();
            gp.Column4 = reader["Column4"].ToString().Trim();
            result.Add(gp);
        }

        return JsonConvert.SerializeObject(result);
    }
}
4

2 に答える 2

3

これが現在の実装と類似している場合は、SQLを変更して次の機能を利用できますROW_NUMBER。T-SQL:ROW_NUMBER()を使用したページング

または、何らかのLINQ実装がある場合は、メソッドを使用.Skip().Take()てページングを実行できます。

于 2012-12-31T20:36:20.783 に答える
2

T-SQLには、ここで役立つ2つの組み込みがあります。1Row_Numberつ目は、特別なORDER BY句で順序付けられた結果セットの各行に一意の増加する序数を割り当てる関数であり、2つ目は、TOP返される行の最大数を制限するキーワードです。

基本的に、クエリは次のようになります。

SELECT TOP @limit * FROM myTable WHERE (ROW_NUMBER() OVER (ORDER BY Q1)) > @limit * @start ORDER BY Q1

次に、Command.CreateParameterを使用して、C#コードからパラメーター@startおよび@limitの値をプラグインします。たとえば、結果の3ページ目(ゼロインデックスstart値2を使用)の場合、1ページあたり15件の結果があり、これは次のステートメントに評価されます。

SELECT TOP 15 * FROM myTable WHERE (ROW_NUMBER() OVER (ORDER BY Q1)) > 30 ORDER BY Q1

...これは、31から45までのクエリ全体からの行を提供し、最初の2ページのクエリはそれぞれ1〜15行と16〜30行を生成します。

于 2012-12-31T20:37:27.567 に答える