1

我正在使用jqGrid,我的后端是asp.net-mvc。我想弄清楚我是否可以使用不同的值来读取和写入后端的属性。

这里的背景是我的服务器端排序是通用的,并且通过获取我的 jqGrid 中传递的列名称来工作,并看起来按我的集合的对象的该属性进行排序。这很好用,除了一种情况

假设我有一个显示人员数据的网格。我在服务器上有一组 Person 对象。假设我有一个显示 personName 的列。

在客户端 colModel 我将 colModel的Name 和 Index 属性设置为“PersonName”。

在服务器端,我的 person 对象有一个 PersonName 属性,所以当我过滤或排序时,它使用 C# 反射按该属性进行排序和过滤。

问题是,如果我想编辑该属性并且编辑是一个选择下拉列表,其中 Id 是 PersonId,文本是 PersonName,当我保存时,我希望它将 Id 保存为“PersonId”属性(而不是 PersonName”财产)

我目前的解决方案(感觉很hacky)是在网格中有两列,

这是一个示例(简化以说明这一点):

  { name: "PersonName", index: "PersonName", width: 78, editable: false },
  { name: "PersonId", index: "PersonId", width: 78, editable: true, hidden: true, editrules: { edithidden: true, required: true} },
  1. 一个可见并用于排序和过滤但不可编辑(名称和索引是 PersonName),因此它不会显示在编辑对话框中。

  2. 隐藏的第二列 (hidden:true) 但具有 edithidden:true 因此它确实显示在编辑对话框中并用于写入值(这将是 PersonId)属性。

这可行,但我想看看是否有更优雅的方法来解决这个问题,除了有两个不同的列真正代表一个数据。

4

3 回答 3

2

jqGrid 提供了许多在编辑单元格时调用的回调(参见此处)。

其中之一是在数据发送到服务器之前调用,它serializeCellData允许您在发送到服务器之前修改数据的序列化方式。如果您的 jqGrid 配置了{cellsubmit: 'remote', cellurl: <a non empty url>}(基于github上的代码) ,则会调用此函数

我会尝试更改该函数中的键(PersonName -> PersonId)。

于 2013-08-30T07:14:29.017 回答
1

您正在使用的解决方案是优雅的。在 jqGrid(或其他网格)中,隐藏列表示主键或外键是一种常见模式。

于 2013-08-30T14:17:37.283 回答
0

我对 jqGrid 不太了解,但你能做这样的事情吗:jqGrid Link Display Text

基本上,您使用 ID 列,但使用格式化程序将值格式化为 PersonName。

于 2013-08-28T23:54:39.620 回答