2011-08-24 5 views
0

jqGrid를 처음 사용하고 인라인 편집 기능을 사용하려고 할 때 문제가 있습니다. 여기 내 코드입니다 : 나의 첫번째 그리드jqGrid - 인라인 편집에서 편집 후 결과를 데이터베이스에 저장할 수 없습니다.

<link rel="stylesheet" type="text/css" media="screen" href="css/ui-lightness/jquery-ui-1.8.16.custom.css" /> 
    <link rel="stylesheet" type="text/css" media="screen" href="css/ui.jqgrid.css" /> 

    <style type="text/css"> 
     html, body { 
      margin: 0; 
      padding: 0; 
      font-size: 75%; 
     } 
    </style> 

    <script src="js/jquery-1.5.2.min.js" type="text/javascript"></script> 
    <script src="js/i18n/grid.locale-en.js" type="text/javascript"></script> 
    <script src="js/jquery.jqGrid.min.js" type="text/javascript"></script> 

    <script type="text/javascript"> 

     $(function(){ 
      var lastsel2 
      $("#list").jqGrid({      
       url:'example.php', 
       datatype: 'xml', 
       mtype: 'GET', 
       colNames:['id','name', 'status'], 
       colModel :[ 
        {name:'id', index:'id', width:55}, 
        {name:'name', index:'name', width:90, editable: true}, 
        {name:'status', index:'status', width:80, align:'right', editable: true},       
       ],  

       onSelectRow: function(id){ 
        if(appid && appid!==lastsel2){ 
         jQuery('#list').restoreRow(lastsel2); 
         jQuery('#list').editRow(id,true); 
         lastsel2=id; 
        }      
       }, 
       editurl: "example.php", 
       pager: '#pager', 
       rowNum:10, 
       rowList:[10,20,30], 
       sortname: 'appid', 
       sortorder: 'desc', 
       viewrecords: true, 
       gridview: true, 
       caption: 'My first grid' 
      }); 
     }); 

    </script> 

</head> 
<body> 
    <table id="list"><tr><td/></tr></table> 
    <div id="pager"></div> 
</body> 

이 문제는 내가이 (가) Enter 키를 누릅니다 후 일시적으로 저장할 수 있습니다 또한 그것을 클릭 한 때 행을 편집 할 수 있습니다. 그러나 그리드를 다시로드하면 이전 데이터가 표시되기 전에 데이터베이스를 업데이트하지 않습니다. 나는 왜 그것을 어떻게 해결할 지 궁금하다. 현재 당신이 appid 정의되지 않은 사용하기 때문에 모든

<?php 
include("dbconfig.php"); 
$page = $_GET['page']; 
$limit = $_GET['rows']; 
$sidx = $_GET['sidx']; 
$sord = $_GET['sord']; 

if (!$sidx) 
    $sidx = 1; 

$db = mysql_connect("$dbhost", "$dbuser", "$dbpassword") or die("Connection Error: " . mysql_error()); 

mysql_select_db("$database") or die("Error connecting to db."); 

$result = mysql_query("SELECT COUNT(*) AS count FROM app"); 
$row = mysql_fetch_array($result, MYSQL_ASSOC); 
$count = $row['count']; 

if ($count > 0 && $limit > 0) { 
    $total_pages = ceil($count/$limit); 
} else { 
    $total_pages = 0; 
} 

if ($page > $total_pages) 
    $page = $total_pages; 

$start = $limit * $page - $limit; 

if ($start < 0) 
    $start = 0; 

$SQL = "SELECT id, name, status FROM app"; 
$result = mysql_query($SQL) or die("Couldn't execute query." . mysql_error()); 

header("Content-type: text/xml;charset=utf-8"); 

$s = "<?xml version='1.0' encoding='utf-8'?>"; 
$s .= "<rows>"; 
$s .= "<page>" . $page . "</page>"; 
$s .= "<total>" . $total_pages . "</total>"; 
$s .= "<records>" . $count . "</records>"; 

// be sure to put text data in CDATA 
while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) { 
    $s .= "<row id='" . $row['id'] . "'>"; 
    $s .= "<cell>" . $row['id'] . "</cell>"; 
    $s .= "<cell>" . $row['name'] . "</cell>"; 
    $s .= "<cell>" . $row['status'] . "</cell>"; 
    $s .= "</row>"; 
} 
$s .= "</rows>"; 
echo $s; 
?> 

답변

0

먼저

onSelectRow: function (id) { 
    if (id && id !== lastsel2){ 
     jQuery('#list').restoreRow(lastsel2); 
     jQuery('#list').editRow(id,true); 
     lastsel2 = id; 
    }      
} 

처럼 뭔가 코드

onSelectRow: function(id){ 
    if(appid && appid!==lastsel2){ 
     jQuery('#list').restoreRow(lastsel2); 
     jQuery('#list').editRow(id,true); 
     lastsel2=id; 
    }      
} 

을 변경해야합니다 : 여기

는 example.php 코드 id 대신.

또한 당신이 colModel 정의의 마지막에 쉼표를 후행 제거해야합니다 : var lastsel2}]과 장소 세미콜론에 },]을 변경합니다.

+0

도움 주셔서 감사합니다.하지만 말씀하신대로했으나 여전히 작동하지 않습니다. jqgrid가 데이터가 수정 된 후 데이터베이스에 대한 변경 사항을 자동으로 업데이트하는지 궁금합니다. 그렇지 않은 경우 saveRow 메서드를 호출하여 다른 방법으로 호출해야합니까? – user878729

+0

@ user878729 :'editRow'는 사용자가 "Enter"를 누른 후'saveRow' 인턴을 호출합니다. 아마도 "example.php"라는 URL 아래에있는 서버 측 *에 문제가있을 것입니다 (사용하는'editurl' 매개 변수를보십시오). jqGrid는 수정 된 데이터를 URL과 웹 서버 (예 :'example.php '아래의 PHP 코드)에 보내면 수정 된 데이터를 데이터베이스에 저장해야합니다. – Oleg

+0

example.php를 확인하고 saveRow에서 데이터를 가져오고 SQL을 실행하는 SQL 문이 없음을 확인했습니다. 나는 그것이 문제라고 생각한다. 내가 어떻게 할 수 있는지 말해 줄 수 있니? 감사! – user878729

관련 문제