2016-02-28 47 views
1

在我的TestPage.php(只是更改數據庫連接)中仔細寫入http://demos.telerik.com/php-ui/grid/foreignkeycolumn的代碼並使用該演示的完全文件DaraSourceResult.php後,它仍然出現了2個錯誤:Telerik PHP Kendo UI網格/外鍵列演示錯誤

1)當網格呈現時,它從數據庫中獲取數據,但ForeignKey列變爲空白。 2)如果您在外鍵列中單擊,它將成功顯示數據庫中的CategoryNames,但是當您選擇一個類別時,它可能不起作用,可能是因爲它試圖在數字字段中使用文本。

我附上了一張顯示上述每個錯誤的圖片。在它下面還有我在TestPage.php中使用的代碼。

請問我能幫我解決這兩個問題嗎?

非常感謝!

Picture with the bugs described above

 <?php 
    require $_SERVER['DOCUMENT_ROOT'] . '/lib/Kendo/Autoload.php'; 
    require $_SERVER['DOCUMENT_ROOT'] . '/lib/DataSourceResult.php'; 
    ?> 


    <?php 
    $result = new DataSourceResult('mysql:host=localhost;dbname=db', 'user', '******'); //ok 


    if ($_SERVER['REQUEST_METHOD'] == 'POST') { 
     header('Content-Type: application/json'); 
     $request = json_decode(file_get_contents('php://input')); 
     $type = $_GET['type']; 
     $columns = array('PKEntrada', 'Descricao', 'Valor', 'FKCategoriaEntrada'); 
     switch($type) { 
      case 'create': 
       $result = $result->create('tblentradas', $columns, $request->models, 'PKEntrada'); 
       break; 
      case 'read': 
       $result = $result->read('tblentradas', $columns, $request); 
       break; 
      case 'update': 
       $result = $result->update('tblentradas', $columns, $request->models, 'PKEntrada'); 
       break; 
      case 'destroy': 
       $result = $result->destroy('tblentradas', $request->models, 'PKEntrada'); 
       break; 
     } 
     echo json_encode($result); 
     exit; 
    } 
    ?> 


    <!DOCTYPE html> 
    <html> 
    <head> 
     <title></title> 
     <link rel="stylesheet" href="styles/kendo.common.min.css" /> 
     <link href="styles/kendo.bootstrap.min.css" rel="stylesheet" /> 


     <script src="js/jquery.min.js"></script> 
     <script src="js/kendo.all.min.js"></script> 
    </head> 
    <body> 


<?php 
$categories = $result->read('tblcategoriasentrada', array('PKCategoriaEntrada as value', 'Categoria as text')); 


$transport = new \Kendo\Data\DataSourceTransport(); 
$create = new \Kendo\Data\DataSourceTransportCreate(); 
$create->url('TestPage.php?type=create') 
    ->contentType('application/json') 
    ->type('POST'); 
$read = new \Kendo\Data\DataSourceTransportRead(); 
$read->url('TestPage.php?type=read') 
    ->contentType('application/json') 
    ->type('POST'); 
$update = new \Kendo\Data\DataSourceTransportUpdate(); 
$update->url('TestPage.php?type=update') 
    ->contentType('application/json') 
    ->type('POST'); 
$destroy = new \Kendo\Data\DataSourceTransportDestroy(); 
$destroy->url('TestPage.php?type=destroy') 
    ->contentType('application/json') 
    ->type('POST'); 
$transport->create($create) 
      ->read($read) 
      ->update($update) 
      ->destroy($destroy) 
      ->parameterMap('function(data) { 
      return kendo.stringify(data); 
     }'); 
$model = new \Kendo\Data\DataSourceSchemaModel(); 
$productIDField = new \Kendo\Data\DataSourceSchemaModelField('PKEntrada'); 
$productIDField->type('number') 
       ->editable(false) 
       ->nullable(true); 
$productNameField = new \Kendo\Data\DataSourceSchemaModelField('Descricao'); 
$productNameField->type('string') 
       ->validation(array('required' => true)); 
$unitPriceValidation = new \Kendo\Data\DataSourceSchemaModelFieldValidation(); 
$unitPriceValidation->required(true) 
        ->min(1); 
$unitPriceField = new \Kendo\Data\DataSourceSchemaModelField('Valor'); 
$unitPriceField->type('number') 
       ->validation($unitPriceValidation); 
$categoryIDField = new \Kendo\Data\DataSourceSchemaModelField('FKCategoria'); 
$categoryIDField->type('number'); 


$model->id('PKEntrada') 
    ->addField($productIDField) 
    ->addField($productNameField) 
    ->addField($unitPriceField) 
    ->addField($categoryIDField); 
$schema = new \Kendo\Data\DataSourceSchema(); 
$schema->data('data') 
     ->errors('errors') 
     ->model($model) 
     ->total('total'); 
$dataSource = new \Kendo\Data\DataSource(); 
$dataSource->transport($transport) 
      ->batch(true) 
      ->pageSize(30) 
      ->schema($schema); 
$grid = new \Kendo\UI\Grid('grid'); 
$productName = new \Kendo\UI\GridColumn(); 
$productName->field('Descricao') 
      ->title('Description'); 
$unitPrice = new \Kendo\UI\GridColumn(); 
$unitPrice->field('Valor') 
      ->format('{0:c}') 
      ->width(200) 
      ->title('Value'); 
$categoryID = new \Kendo\UI\GridColumn(); 
$categoryID->field('FKCategoria') 
      ->title('FKCategory') 
      ->values($categories['data']) 
      ->width(200); 
$command = new \Kendo\UI\GridColumn(); 
$command->addCommandItem('destroy') 
     ->title('&nbsp;') 
     ->width(150); 
$grid->addColumn($productName, $categoryID, $unitPrice, $command) 
    ->dataSource($dataSource) 
    ->addToolbarItem(new \Kendo\UI\GridToolbarItem('create'), 
    new \Kendo\UI\GridToolbarItem('save'), new \Kendo\UI\GridToolbarItem('cancel')) 
    ->height(540) 
    ->navigatable(true) 
    ->editable(true) 
    ->groupable(true) 
    ->pageable(true); 
echo $grid->render(); 
?> 

回答

0

我發現了錯誤。我只是變量中列字段名稱的問題。它不是使用FKCategoriaEntrada,而是試圖使用FKCategoria。

代碼現在運行平穩。如果需要,您可以使用它。