【发布时间】:2011-09-25 00:21:24
【问题描述】:
我正在使用 MVC 创建一个网页,其中 JQGrid 显示一些数据。网格使用内联编辑,其中一列在编辑模式下成为选择输入。当我开始编辑时,选择输入似乎没有采用单元格的值,而是最初选择的项目是列表中的第一个。这发生在 IE 中,但是在使用 Firefox 时,所选项目正确地采用了单元格的值。
我将我的专栏定义如下:-
{ name: 'MyColumn', index: 'MyColumn', width: 80, align: 'left', editable: true,sortable: true,hidden: false,Key: false, edittype: 'select', editoptions: { value: "0:None;1:Option1;2:Option2;3:Option3", width: 'auto',size: 20, maxlength: 30}}
我使用 json 帮助器类填充我的网格,以将 DataTable 转换为字符串。我的控制器类中的数据绑定函数如下所示:-
DataTable results = GetResults(sidx, sord, startIndex, endIndex, out resultsCount);
return Content(JsonHelper.JsonForJqgrid(results, rows, resultsCount, page), "application/json");
我用firebug测试了生成的html,在触发编辑模式后,IE和FF都给出如下。
<td aria-describedby="MyGrid_MyColumn" title="Option3" style="text-align: left; color: red;" role="gridcell">
<select role="select" width="auto" formatter="select" size="1" maxlength="30" id="3_MyColumn" name="MyColumn" class="editable">
<option role="option" value="0">None</option>
<option role="option" value="1">Option1</option>
<option role="option" value="2">Option2</option>
<option role="option" value="3">Option3</option>
</select>
</td>
我的数据表当前将列的值作为“文本”值获取,因此 FF 将单元格的值与选择输入的“文本”值匹配。我有能力将值作为选择输入中使用的实际值,但这意味着单元格在不处于编辑模式时显示值而不是文本(并且在 IE 中的编辑模式下仍然不匹配)。
为了澄清,问题是如果单元格的值为“Option3”,在 IE 中进入编辑模式时,选择输入将显示“None”,因为它是选定的项目,而不是“Option3”。 Firefox 将正确地将“Option3”显示为所选项目。
有什么建议吗?
更新:
找到了解决方案,我不会称之为答案。我更新了我的 selectRow 函数,并在进入编辑模式之前收集了单元格值,然后使用所选选项更新了下拉列表。感觉有点像 hack,但它确实有效。
onSelectRow: function(id){
if (id){
if (id != lastSel){
jQuery('#MyGrid').restoreRow(lastSel);
var rowdata = jQuery('#ShippingListGrid').getRowData(id);
jQuery('#MyGrid').editRow(id, true, true, true, '/EditURL/', null, true, true);
$("#" + id + "_MyColumn").val($("#" + id + "_MyColumn option:contains('" + rowdata.MyColumn + "')").val());
lastSel = id;
}
else {
lastSel = '';
}
}
}
【问题讨论】:
标签: asp.net-mvc entity-framework jqgrid