2010-09-20 63 views
3

我希望你早上好。将命令列添加到Asp.Net中的jqGrid MVC

我想在我的Asp.Net应用程序中使用jqGrid。到目前为止,我一直在生成一个html表格并将其转换为网格,但我想尝试一种更好的方法:通过AJAX调用加载数据,因为它与网格应该是一样的。我发现了如何获取数据,但除了数据列之外,我还想要“编辑”和“删除”列。我如何实现它?

我宁可不使用我的控制器中的按钮的HTML。理想的解决方案是只发送数据,并让jqGrid根据一些客户端模板和id值添加所需的列。我无法手动完成,因为我无法将列添加到现有网格。那么,我该怎么做?

更新。我不需要仅仅实现编辑/删除功能。我需要的是基于某个模板和“id”值添加一列HTML,如<a href="MoreDetails/{id}">[More details]</a>

回答

2

如果您使用jqGrid,从服务器发回纯数据是正确的方法。

要实现行编辑就像你想看看jqGrid Demo并选择左边的部分“行编辑”,然后选择“自定义编辑”。我个人更喜欢使用如此命名的“inline editing”(在“行编辑”下选择相同的演示“输入类型”)。通过双击而不是选择行来实现在编辑模式下的切换(参见jqGrid - edit only certain rows for an editable column作为示例)。要删除行,您可以使用“form editing”中的“删除”按钮。要使用它,您应该添加Navigator关于navGrid方法,并用相应的参数选择您需要的工具栏中的按钮。要在演示中看到此选择,请选择“实时数据操作”,然后选择“导航器”。

修订:在jqGrid Demo,请参见“行编辑”,然后“自定义编辑”你可以看到你如何使用setRowDatagridCompleteloadComplete手柄内设置任何 HTML代码片段。你为什么不喜欢这种方法?您也可以使用predefined showlink formatter显示链接或使用custom formattercustom unformatter在jqGrid单元格中显示任何包含的HTML。

+0

非常感谢您的回答, 但是,这不是我所需要的。我已经实现了一个自定义编辑对话框,我需要的是一个调用它的链接。一般来说,我需要为各种原因添加命令列,而不仅仅是删除或编辑。 – ulu 2010-09-20 12:15:51

+0

@ulu:在“调用它的链接”下是什么意思?如果您具有自定义编辑对话框,则可以在导航器中添加带有操作的按钮(每个操作具有任意图标或文本的一个按钮),从而调用该对话框。如果用户选择一行并按下导航器上的按钮,则可以使用所选行中的数据调用对话框。如果您想要在每行**中添加操作按钮,您可以按照演示“行编辑”和“自定义编辑”进行操作。您可以调用自定义对话框而不是在演示中使用的'editRow','saveRow'和'restoreRow'。 – Oleg 2010-09-20 13:06:03

+0

奥列格, 忘记编辑。我需要的是带有自定义html的附加列,它可以是像“/ Some/Other/{id}/page”这样的链接,也可以是调用参数化函数的按钮。就像GridView中的模板列一样。 – ulu 2010-09-20 13:27:30

2

您现在可能已经想通了,但无论什么值得在这里是我使用自定义格式化程序的答案。 Action列是使用自定义格式化程序呈现的,该自定义格式程序显示调用简单JavaScript函数的按钮。

$(document).ready(function() { 
     $("#all-errors-list").jqGrid({ 
      url: '/Error/AllErrors/', 
      datatype: 'json', 
      mtype: 'GET', 
      colNames: ['Id', 'Error','Actions'], 
      colModel: [ 
      { name: 'Id', index: 'Id', width: 100, align: 'left', editable: true}, 
      { name: 'ErrorDetails', index: 'ErrorDetails', width: 350, align: 'left' }, 
      { name: 'ActionId', width:400, formatter: actionFormatter} 
         ], 
      pager: '#all-errors-pager', 
      rowNum: 10, 
      rowList: [10, 20, 50], 
      sortname: 'Id', 
      sortorder: 'asc', 
      viewrecords: true, 
      imgpath: '<%=Html.ImagePath()%>', 
      caption: 'Open Errors', 
      height: "100%", 
      width: "100%", 
      gridComplete: function() { $("button").button(); } 
     }) 

    function actionFormatter(cellvalue, options, rowObject) { 
     return "<button onclick=\"alert('" + cellvalue + "')\">Details</button>" ; 
    } 

我希望有帮助。

+0

是的,正如Oleg建议的那样,我使用了一个自定义格式化程序。不管怎么说,还是要谢谢你! – ulu 2010-10-14 18:04:24