Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/sharepoint/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 如何从jqgrid中的dataurl获取行id或参数,以创建用于编辑行的动态选择列表_Asp.net_Jquery_Jqgrid - Fatal编程技术网

Asp.net 如何从jqgrid中的dataurl获取行id或参数,以创建用于编辑行的动态选择列表

Asp.net 如何从jqgrid中的dataurl获取行id或参数,以创建用于编辑行的动态选择列表,asp.net,jquery,jqgrid,Asp.net,Jquery,Jqgrid,我有一个ASP.NET网站,其C后端使用Jqgrid 我希望用户能够在网格中选择要编辑的项目。其中一个可编辑的字段将作为下拉选择列表呈现给用户,其中仅包含该用户的有效选项 例如,假设我有一个显示人物的网格。如果编辑了person1,用户可以从该项目的选择列表中选择蓝色或红色,但是如果编辑了person2,用户只能从选择列表中选择黄色或绿色 我想根据选择的人员/行动态填充选择列表 我在特定字段上设置了editoptions和dataurl,如下所示: editoptions: { dataUrl:

我有一个ASP.NET网站,其C后端使用Jqgrid

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

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

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

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

editoptions: { dataUrl: 'FetchData.aspx' }
然而,我需要某种类型的参数来传递到FetchData.aspx页面,以便它可以对特定的人进行背景检查,并为特定的人创建正确的列表

我希望可以传递rowid或itemname或以下内容来标识所选的特定行/项:

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

如何传递参数以便为特定项目创建正确的项目列表?网络上有无数类似的问题,但我还没有找到一个结论性的答案……

我通过添加以下onsetrow函数解决了这个问题。请注意,下面代码中的“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'); } }
}

你好,Stanley,是的,我是这样实现的,但它似乎不是一个清晰的解决方案…我的意思是先加载选择列表,然后在1-2秒后再次呈现选择列表。在我的例子中,当用户试图更改某些内容时,选择列表正在跳转。你有相同的现象吗?没有-对我来说,这是完美的工作。听起来您可能正在从某个表单编辑事件触发列表数据的加载函数,而该函数会被某个其他表单编辑事件覆盖。查看以了解事件的执行顺序。这可能有助于解释为什么它的行为不合理。但正如我所说,我并没有遇到类似的问题。您可以看到填充select字段的延迟。我也有同样的问题。无论我使用哪种方法:onsetrow或beforeInitForm。延迟的原因是为了填充列表,jqgrid对应用程序进行异步ajax调用,以获取要填充列表的数据。因此,当ajax仍在后台以单独的web请求获取数据时,表单被呈现。是的,我的应用程序也是这样工作的。为了防止在填充列表时出现这种等待,您可以使用静态选项列表,但如果列表必须是动态的,则您必须按原样获取数据。通过使ajax请求同步异步=false,您可能会延迟呈现表单,直到ajax完成接收数据。是的,问题通过ajaxSelectOptions:{async:false}解决。它需要更长的时间,但不会跳跃。我更喜欢这个。谢谢你的建议!