0

我有一个带有搜索功能的网格面板。每次按下搜索按钮时,都会传递一个查询,对网格面板进行排序并显示

查询工作正常。但是当我按下“下一页按钮”时,查询信息丢失并返回到原始状态[没有查询执行]

bbar: new Ext.PagingToolbar(
{
    store: store,
    pageSize: 20,
    plugins: [new Ext.ux.Andrie.pPageSize()],
    displayInfo: true,
    width: '400',
    refresh: function(pt, o) {
        store.reload();
        FormPanel.findById('grid').getView().refresh();
    },
    emptyMsg: "No message to display"
    }
)

为什么会这样?

4

2 回答 2

1

您是否使用服务器端脚本(例如 PHP)?在获取您在网格中显示的数据..?我没有尝试过使用 lastOption 的东西,但你可以试试这个……它只是一个简单的 PHP 技巧……使用$_SESSION……我也有和你一样的情况……而且 $_SESSION 函数对我有用。

这是示例代码。

通常在服务器端,您有这样的代码来获取数据库中的一些数据。您需要发布从搜索字段发送的参数。您没有在此处发布您的服务器端代码。所以我会假设它看起来像这样。

//第一件事你需要发布搜索字段中的参数以在数据库中搜索//

$pattern = $_REQUEST['search_pattern']; //you may also use the $_POST instead of $_REQUEST

// 你的数据库查询可能看起来像这样..

("SELECT * FROM your_table WHERE table_data LIKE %$pattern% ");

//每次你​​加载你的网格。它总是会调用服务器。所以如果你设置一个条件,即要显示的数据将取决于你的搜索字段的值,如果你的$_POST函数返回一个 NULL 肯定它不会显示任何数据。

因此,如果您在搜索字段中输入一个值并加载网格。首次加载时,服务器获得了模式的值,因此您在网格上获得了输出,但请记住,服务器端页面仅保存一次该值,如果服务器端页面被刷新或再次加载,则该值现在将为 null,除非你又在搜索栏上放了一些东西。这就是我认为按下下一个按钮后没有显示的原因,因为下一个按钮再次加载服务器端页面,但是这次下一个按钮没有参数,这就是为什么服务器无法获取任何数据,因为模式现在为 NULL . 因此,为了长时间保存您之前输入的值,我们需要使用 $_SESSION...// 代码看起来像这样。

因为每次我们加载服务器页面时它总是执行 $_POST 函数,所以如果我们发布一个空值,因此它也会导致一个空值。要从搜索字段中获取我们之前发布的值,我们将将值放入会话。来了...

$pattern = $_POST['search_pattern'];

首先,如果您在搜索字段中键入内容,$pattern 将有一个值,然后我们将其保存到会话变量中,

$_SESSION['pattern'] = $pattern;

但是请记住,每次按下下一个按钮时,下一个按钮也会加载服务器端页面,它会重新加载服务器页面,此时$_POST返回一个空值,因为我们没有与下一个按钮一起发送参数。所以我们只需要在会话变量上存储一个值,POST 有一个值,它是当您在搜索字段中键入一个单词时。我们需要这样做。

$pattern = $_POST['search_pattern'];

if($pattern != ''){ 
// we need to check if the value is null because when you pressed the next button after it reloads the pages it would now be null and this time we need to get the previous value. while if the  value is not null we will save it to the session variable..

$_SESSION['pattern'] = $pattern;

}else{

    // here is when the next button is pressed it will go here since the $_POST is now null
    we will get the previous value that we saved on the session variable//


$pattern = $_SESSION['$pattern'];

}

然后,查询数据到数据库...

整个代码看起来像这样..

<?php
session_start();

// mysql connection here//

$pattern = $_POST['search_pattern'];

if($search_pattern !=''){

$_SESSION['pattern'] = $pattern;

}else{

$pattern = $_SESSION['pattern'];

}

$start = ($_REQUEST['start'] != '') ? $_REQUEST['start'] : 0;
$limit = ($_REQUEST['limit'] != '') ? $_REQUEST['limit'] : 20;

$query =mysql_query("SELECT * FROM students WHERE lname LIKE '$pattern%' ");

$totaldata = mysql_num_rows($query);

while($row = mysql_fetch_assoc($query)){
$items[] = array(
        'id' => $row['student_id'],
    'lname' => $row['lname'],
    'fname' => $row['fname'],
    'mname' => $row['mname'],
    'gender' => $row['gender'],
);


}

  $matches = Array();
  foreach ($items as $item) {
      $matches[] = $item;
    }

echo '({"totalCount":"'.$totaldata.'","matches":'.json_encode($matches).'})'; 

?>
于 2012-11-04T05:49:14.027 回答
0

不确定您使用的是哪个商店。但重新加载需要选项参数,

使用配置的 Reader 和上次执行的加载操作的选项从配置的代理重新加载记录缓存。

参数: options : Object (可选)一个包含加载选项的对象,可以覆盖上次加载操作中使用的选项。有关详细信息,请参阅加载(默认为 null,在这种情况下使用 lastOptions)。

将新参数添加到现有参数:

lastOptions = myStore.lastOptions;
Ext.apply(lastOptions.params, {
    myNewParam: true
});
myStore.reload(lastOptions);

返回:无效

参考:http ://extjs.cachefly.net/ext-3.4.0/docs/

于 2012-07-30T06:45:35.897 回答