- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
how to set a composite primary key?-6ren"> how to set a composite primary key?-如何为“一体化”方法设置复合主键(在 JS 文件中定义的网格,以及在 php 文件中使用 jqGridEdit 类的数据)?拜托,对我来说,表 T 的复合主键是用属于该表 T 的某些字段定义的基本主键-6ren">
如何为“一体化”方法设置复合主键(在 JS 文件中定义的网格,以及在 php 文件中使用 jqGridEdit 类的数据)?拜托,对我来说,表 T 的复合主键是用属于该表 T 的某些字段定义的基本主键!
这是我的测试,但我没有得到任何数据,也无法使用 CRUD 操作:
在我的 JS 文件中,我有这行代码:
...
colModel:[
{name:"index",index:"index",label:"index"}, // <= THAT'S JUST THE INDEX OF MY TABLE
{name:"user",index:"user",label:"user",key:true}, // <= A PART OF MY COMPOSITE PRIMARY KEY
{name:"pwd",index:"pwd",label:"pwd",key:true}, // <= A PART OF MY COMPOSITE PRIMARY KEY
{name:"state",index:"state",label:"state",key:true}, // <= A PART OF MY COMPOSITE PRIMARY KEY
... <= AND SO ON
url:"mygrid_crud.php",
datatype:"json",
jsonReader:{repeatitems:false},
editurl: "mygrid_crud.php",
prmNames:{"id":"index"} // <= WHAT I NEED TO WRITE HERE ???
...
在我的 php 文件 (mygrid_crud.php) 中:
...
$grid = new jqGridEdit($conn);
$query = "SELECT * FROM mytable WHERE user='$user' and pwd='$pwd' and state='$state'..."; // <= SELECT * it's ok or i need to specify all fields i need ?
$grid->SelectCommand = $query;
$grid->dataType = "json";
$grid->table = 'mytable';
$grid->setPrimaryKeyId('index'); // <= WHAT I NEED TO WRITE HERE ???
...
$grid->editGrid();
请告诉我哪里出了问题,以及如何在这种方法中设置复合主键!?
非常感谢您对旅游的回应。
所以,这是我经过大量努力后得到的解决方案;-(
这可能不是最佳解决方案,但添加、编辑和删除操作效果很好!!!
这是一个带有复合主键的表定义示例:
CREATE TABLE `chat` (
`number` int(11) NOT NULL AUTO_INCREMENT,
`user` varchar(30) NOT NULL,
`pwd` varchar(100) NOT NULL,
`subject` varchar(100) NOT NULL,
`time` datetime NOT NULL,
`recipient` varchar(100) NOT NULL,
`message` varchar(1000) DEFAULT NULL,
PRIMARY KEY (`user`, `pwd`, `subject`, `time`, `recipient`),
UNIQUE KEY `number` (`number`)
)
所以要用网格管理这样的表,我按如下方式进行。
在我的 HTML 文件中,我有这行代码:
...
<table id='grid_chat'></table>
<div id='pager_chat'></div>
...
在我的 PHP 文件中,我有这行代码:
...
$grid = new jqGridRender($conn);
…
if($oper=="edit"){…}
elseif($oper=="del"){…}
…
$grid->setPrimaryKeyId('number');
…
// here i get the primary key for the new message i want to add
$chat = $_SESSION["chat"];
$user = $chat["user"];
$pwd = $chat["pwd"];
$subject = $chat["subject"];
…
$query = "SELECT * FROM chat WHERE user='$user' and pwd='$pwd' and subject='$subject'...”;
$grid->SelectCommand = $query;
…
// for the UNIQUE KEY (used for edit and dell operations)
$grid->setColProperty("number", array("hidden"=>true));
// for the COMPOSITE PRIMARY KEY (used for add operation)
$grid->setColProperty("user", array("hidden"=>true,"editoptions"=>array("value"=> $user),"editrules"=>array("required"=>true)));
$grid->setColProperty("pwd", array("hidden"=>true,"editoptions"=>array("value"=> $pwd),"editrules"=>array("required"=>true)));
$grid->setColProperty("subject", array("hidden"=>true,"editoptions"=>array("value"=> $subject),"editrules"=>array("required"=>true)));
$grid->setColProperty("time", array("hidden"=>true,"editoptions"=>array("value"=> $time),"editrules"=>array("required"=>true)));
$grid->setColProperty("recipient", array("hidden"=>true,"editoptions"=>array("value"=> $recipient),"editrules"=>array("required"=>true)));
// for the message
$grid->setColProperty("message", array("classes"=>"multiligne","label"=>"Message","width"=>400,"edittype"=>"textarea","editrules"=>array("required"=>true)));
// Set a new user datetime format using PHP convensions (for the php time variable)
$grid->setUserTime('Y-m-d H:i:s');
…
这不是“一体式”方法,但效果很好!!
如果有人看到需要优化的东西,请告诉我!!!
问候,
品质
最佳答案
首先,您发布的 colModel
定义有些奇怪。例如,像 colModel":[
这样的文本肯定是错误的。如果代码包含很多错误(可能是格式错误,但读者不知道),就很难对代码说些什么您的原始代码)。如果您在格式化数据时遇到问题,只需发布您拥有的内容,其他人将能够重新格式化您的问题。
现在谈谈您的主要问题。在 more as 一行中使用 key:true
是错误的方法。在 http://www.trirand.com/jqgridwiki/doku.php?id=wiki:colmodel_options您可以在 key
参数的描述中找到以下内容:
In case if there is no id from server, this can be set as as id for the unique row id. Only one column can have this property. If there are more than one key the grid finds the first one and the second is ignored.
jqGrid 需要有一个 id 来区分一行网格和另一行。您可以使用任何不是您真实 ID 的 ID(例如 1、2、3 等)填充 jqGrid。如果包含组成复合主键的信息的所有列在 colModel
中都有选项 editable:true
那么这些列的值将在所有编辑操作中发送到服务器,并且您将能够在 mygrid_crud.php 文件中构建相应的 SELECT 语句。
如果您不想显示某些您只需要构建复合键的列,您可以在 colModel
hidden: true, editable: true, editrules: { edithidden: false }, hidedlg: true
这将使列对用户不可见,但数据将在所有编辑操作中发送到服务器。
再多说一句就结束了。不要在 .例如 {name:"index", index:"index", label:"index"}
三个字段都相同。所以你可以减少所有到 {name:"index"}
关于jq网格 : "All in One" approach width jqGridEdit Class > how to set a composite primary key?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3063385/
我是一名优秀的程序员,十分优秀!