我在jqgrid表中定义了一个select,如下所示:
{name: 'station', index: 'station', editable: true, width: 60,
edittype:"select", defaultValue:"",
editoptions:{
dataUrl: "getStationList"
},
editrules: { required: true }
},
getStationList返回类似于:
的内容<select>
<option value="id1">Station1</option>
<option value="id2">Station2</option>
</select>
使用当前定义,第一次显示组合时,Station列表显示得很好(Station1,Station2,...),当选择了Station1时,JSON包含“id1”。 但是当表格更新时,它会在选择组合中显示“id1”,而不是继续显示电台的列表。
这是一个错误还是我缺少一些配置选项? (可能是最后一次)
谢谢!
答案 0 :(得分:1)
我认为在填充网格期间你已经遇到了问题。如果您想使用ID而不是名称,则应使用formatter: "select"
另外到edittype:'select'
(请参阅the documentation)。在这种情况下,在使用数据填充网格期间,您必须在网格中放置ID。我的意思是jqGrid的输入数据包含id1
和id2
而不是"Station1"
和"Station2"
。只有在您能够使用提供dataUrl
的{{1}}的情况下。下一个问题是:您必须设置<option value="id1">Station1</option>
或editoptions.value
而不是使用formatoptions.value
。因此dataUrl: "getStationList"
的使用相对复杂。可以做的是发送像formatter: "select"
这样的数据作为主网格数据的一部分。可以将{"id1":"Station1", "id2":"Station2"}
作为JSON输入的{stations: {"id1":"Station1", "id2":"Station2"}}
部分放置(请参阅the documentation)。在userdata
回调内,可以根据beforeProcessing
设置formatoptions.value
。事实上,不仅在编辑数据期间,而且在每次填充网格时,事实上都会向userdata.stations
发出请求。
我个人更喜欢不使用getStationList
并使用
formatter: "select"
客户端代码在某种程度上“不知道”数据表示的实现细节。可以使用数据“Station1”和“Station2”填充网格,并在编辑网格期间发送相同的数据。另一方面的服务器将在需要时通过名称获取ID。通常,如果我使用“Id”和“Name”这样的列创建“查找”表<select>
<option value="Station1">Station1</option>
<option value="Station2">Station2</option>
</select>
,我会设置
Stations
因此表中有唯一索引可以通过名称获取Id。所有带有Name的Update语句都与Id完全一样快。我在所有内部SQL语句中使用Id,但仅将Name发送到外部源。我不需要使用CONSTRAINT UC_Stations_Name UNIQUE NONCLUSTERED (Name ASC)
。