我正在使用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>
我的数据表当前获取列的值为“text”值,因此FF将单元格的值与select输入的“text”值匹配。我有能力将值作为select输入中使用的实际值,但这意味着单元格在不处于编辑模式时显示值而不是文本(并且在IE中的编辑模式下仍然不匹配)。 / p>
为了澄清,问题是如果单元格的值为'Option3',则在IE中进入编辑模式时,选择输入将显示“无”作为其选择的项目而不是“选项3”。 Firefox会正确显示“Option3”作为选定项目。
任何提示?
更新
找到解决方案,我不会称之为答案。我更新了我的selectRow函数,并在进入编辑模式之前收集了单元格值,然后使用所选选项更新了下拉列表。感觉有点像黑客,但它确实有效。
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 = '';
}
}
}