如何从jqgrid中的dataurl获取行id或参数以创建动态选择列表来编辑行

我有一个带有C#后端的ASP.NET网站,它使用Jqgrid。

我希望用户能够选择网格中的项目进行编辑。 其中一个可编辑的字段将作为下拉选择列表呈现给用户,该列表仅包含该用户的有效选项。

例如,假设我有一个显示人物的网格。 如果编辑“person1”,则用户可以从该项目的选择列表中选择“蓝色”或“红色”,但是如果编辑“person2”,则用户只能选择“黄色”或“绿色”。选择清单。

我想根据选择的人/行动态填充选择列表。

我在特定字段上设置了editoptions和dataurl,如下所示:

editoptions: { dataUrl: 'FetchData.aspx' } 

然而,我不知何故需要某种参数传递给FetchData.aspx页面,这样它就可以对特定的人进行背景检查,并为特定的“人”创建正确的列表。

我希望我可以传递rowid或itemname或类似内容,以识别所选的特定行/项:

 editoptions: { dataUrl: 'FetchData.aspx?selecteditem=' + Id } 

如何传递参数以便为特定项目创建正确的项目列表? 网上有无数类似的问题,但我找不到确凿的答案……

我通过添加以下onSelectRow函数解决了这个问题(注意下面代码中的’Id’代表我想作为参数传递的列的名称。它可以是网格中的任何列名):

 onSelectRow: function (id) { var temp = $("#list").getRowData(id)['Id'] $("#list").setColProp('mySelectListColumnName', { editoptions: { dataUrl:'FetchData.aspx?selecteditem=' + temp }); } 

以上内容有助于传递参数。 但是,仅此一项还不够 – 它允许FetchData.aspx接收参数并相应地自定义html响应,但它只从dataUrl获取一次值 – 因此当我选择不同的行时它不会刷新。

为了解决这个问题,我还添加了以下声明:

 jQuery.extend(jQuery.jgrid.edit, { recreateForm: true }); 

这确保了每次单击编辑时都会重新创建编辑表单,这就是我想要的,因为每行的编辑表单会略有不同。 完美的工作。 希望这可以帮助那里的人 – 那里有一个迷宫的选择,这是我见过的最简单的。 它有效。

将其添加到您的默认值:

 jQuery.extend(jQuery.jgrid.edit, { recreateForm: true }); 

这对你的网格参数:

 ajaxSelectOptions: { data: { selecteditem: function() { return $('#list').jqGrid('getGridParam', 'selrow'); } } }