0

私はこの問題を高低で検索しました...そして、多くの人が同じ問題を抱えていることがわかりましたが、明確な解決策はありません...基本的に私はextjsにグリッドを持っています...それはsqldbからデータを取得します。jsonを使用して正常にロードされます。「しかし」... ページングを実装しようとすると、ここが厄介になります...

  1. pagesize は 5 に設定されています...つまり、最初のページには 5 つのレコードしか表示されませんが、グリッドにはレコード全体が表示されます

  2. 「次へ」ボタンは存在しますが、レコード全体が最初のページに既にあるため、技術的には機能しません

  3. page.loadPage(2)... を設定すると、「2 ページ目を表示しています」というメッセージが表示されますが、実際にはレコード全体が表示されています

  4. 「Page _ of 6」のページ番号は常に空白です。下の画像を参照してください...

    ここに画像の説明を入力

以下は私の店です...

       var store = Ext.create('Ext.data.Store', {
        storeId: 'myData',
        pageSize: 5,
        autoLoad: true,
        method: "POST",
        remoteSort: true,
        fields: [
    { name: 'Q1', type: 'int' },
    { name: 'Q2', type: 'int' },
    { name: 'Q3', type: 'int' },
    { name: 'Q4', type: 'int' },
    { name: 'Q5', type: 'int' },
    { name: 'Improvements', type: 'string' },
    { name: 'Comments', type: 'string' }
    ],

        sorters: [
        {
            property: 'Q1',
            direct: 'ASC'
        }
     ],

        proxy: {
            type: 'ajax',
            url: 'GridView/writeRecord',
            reader: {
                type: 'json',
                totalProperty: "count",
                root: "myTable"
            }
        },
        autoLoad: { params: { start: 0, limit: 5} }   

    });

    this.grid = Ext.create('Ext.grid.Panel', {
        title: ' ',
        trackMouseOver: true,
        disableSelection: true,
        autoHeight: true,
        store: store,
        loadMask: true,
        height: 500,
        width: 800,
        renderTo: Ext.getBody(),
        columns: [

        { header: 'Q1',
            sortable: true, dataIndex: 'Q1'
        },
        { header: 'Q2',
            sortable: true, dataIndex: 'Q2'
        },
        { header: 'Q3',
            sortable: true, dataIndex: 'Q3'
        },
        { header: 'Q4',
            sortable: true, dataIndex: 'Q4'
        },
        { header: 'Improvements', flex: 1,
            sortable: true, dataIndex: 'Improvements'
        },
        { header: 'Comments', flex: 1,
            sortable: true, dataIndex: 'Comments'
        }
    ],
        bbar: Ext.create('Ext.PagingToolbar', {
            store: store,
            displayInfo: true,
            preprendButtons: true,
            displayMsg: 'Displaying Surveys {0} - {1} of {2}',
            emptyMsg: "No Surveys to display"

        })
    });

これは私のJSONです...実際には30個のレコードがありますが、トリミングしました...

  {
  "count": 30,
  "myTable": [
  {
  "Q1": "1",
  "Q2": "1",
  "Q3": "1",
  "Q4": "1",
  "Improvements": "",
  "Comments": "1"
},
{
  "Q1": "3",
  "Q2": "2",
  "Q3": "2",
  "Q4": "2",
  "Improvements": "This is A very long comment. What do you think?",
  "Comments": "Agreed"
},
{
  "Q1": "4",
  "Q2": "2",
  "Q3": "4",
  "Q4": "3",
  "Improvements": "Hello2",
  "Comments": "Hello2"
},
{
  "Q1": "3",
  "Q2": "2",
  "Q3": "2",
  "Q4": "1",
  "Improvements": "Hello4",
  "Comments": "Hello4"
}

] }

また、これが役立つ場合は、Jsonを取得する方法です

        string sqlquery = "SELECT Q1, Q2, Q3, Q4, Improvements, Comments FROM ITable";
        conn.Open();
        SqlDataAdapter cmd = new SqlDataAdapter(sqlquery, conn);
        SqlCommand comd = new SqlCommand(sqlquery, conn);
        DataSet myData = new DataSet();
        cmd.Fill(myData, "myTable");

        comd.CommandText = "SELECT COUNT(*) FROM ITable";
        Int32 count = (Int32)comd.ExecuteScalar();

        comd.ExecuteNonQuery();
        conn.Close();


        var results = (new

        {

            TotalNumber = count,

            myTable = myData

        });

        return JsonConvert.SerializeObject(new { count=count, myTable = myData.Tables[0] }, Formatting.Indented,
                        new JsonSerializerSettings
                        {
                            ReferenceLoopHandling = ReferenceLoopHandling.Ignore
                        });

私は私のJsonが正しいことを知っています...そしてそれは「Displaying _ of 30」と言っているので30レコードを読み取ります...私は何が間違っているのか分かりません...それはブラウザの問題ではありません...なぜですか1ページですべてを吐き出しますか?誰か?

4

1 に答える 1

2

ページング ツールバーを使用する場合、サーバーはデータをページングすることになっています。一度にすべてのレコードをフィードするわけではありません。

ページング ツールバーは各ページを要求するリクエストを送信し、サーバーはそのページのレコードのみを返すことになっています。

メモリ内データをページングする場合 (一度にすべてをフェッチする場合は、独自に実装するか、拡張機能の 1 つを使用する必要があります。

http://docs.sencha.com/ext-js/4-1/#!/api/Ext.toolbar.Pagingの「ローカル データを使用したページング」というタイトルのセクションを参照してください。

したがって、意図したとおりに使用するには、サーバー コードを変更して、startおよびlimitHTTP パラメーターを考慮する必要があります。

于 2012-11-02T21:01:01.400 に答える