3

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

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

例如,假设我有一个显示人员的网格。如果“person1”被编辑,用户可以从该项目的选择列表中选择“blue”或“red”,但如果“person2”被编辑,用户只能从该项目的选择列表中选择“yellow”或“green”选择列表。

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

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

editoptions: { dataUrl: 'FetchData.aspx' }

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

我希望我可以通过 rowid 或 itemname 或以下内容来识别所选的特定行/项目:

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

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

4

2 回答 2

3

我通过添加以下 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 });

这样可以确保每次单击编辑时都会重新创建编辑表单,这是我想要的,因为每一行的编辑表单都会略有不同。完美运行。希望这对那里的人有所帮助-那里有很多选择,这是我见过的最简单的。它有效。

于 2012-07-18T06:09:43.707 回答
0

将此添加到您的默认值:

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

这对你的网格参数:

ajaxSelectOptions: {
    data: {
        selecteditem: function() { return $('#list').jqGrid('getGridParam', 'selrow'); } }
}
于 2014-09-06T20:45:18.857 回答