【问题标题】:Jqgrid: Access Selected Row Cell value in Code behindJqgrid:在后面的代码中访问选定的行单元格值
【发布时间】:2014-12-10 10:44:31
【问题描述】:

我想在后面的代码中访问选定的行单元格 ID。我可以通过 Ajax 调用来做到这一点,但是当我尝试从 Jqgrid 子网格发送数据时这是不可能的。

下面是子网格代码:

 subGridRowExpanded: function (subgrid_id, row_id) {

              debugger;
              var subgrid_table_id, pager_id; subgrid_table_id = subgrid_id + "_t";
              var selected_row_id = $('#tblFormData').jqGrid('getCell', row_id, 'Category_Id')
              // pager_id = "p_" + subgrid_table_id;
              $("#" + subgrid_id).html("<table id='" + subgrid_table_id + "' class='scroll'></table><div id='" + pager_id + "' class='scroll'></div>");
              $("#" + subgrid_table_id).jqGrid({
                 // $("#tblTest").jqGrid({
                      url: "/Forms.aspx/GetFormsData", //?selected_row_id=" + selected_row_id,
                      data: '{"CategoryDesc":"' + selected_row_id + '"}',
                      datatype: "json",
                      contentType: "application/json; charset=utf-8",
                      loadonce: true,
                      width: "300",
                      height: "auto",
                      pager:"#tblSubpager",
                      colNames: ['FormName','FormPath'],
                      colModel: [
                                     { name: "FormName", index: "FormName", editable: true, formatter: 'showlink' },
                                     //{ name: "FormPath", index: "FormPath", editable: true, hidden: true },
                         {
                             name: 'FormPath',
                             index: 'FormPath',
                             hidden: true,
                             enctype: "multipart/form-data",
                             editable: true,
                             edittype: 'file',
                             editrules: {
                                 edithidden: true,
                                 required: true
                             },
                             formoptions: {
                                 elmsuffix: '*'
                             }
                         }
                 
                      ],
                      gridview: true,
                      autoencode: true,
                      ajaxGridOptions: { contentType: 'application/json; charset=utf-8' },
                      serializeGridData: function (postData) {
                          return JSON.stringify(postData);
                      },
                      jsonReader: {
                          root: function (obj) { return obj.d; },
                          page: function (obj) { return 1; },
                          total: function (obj) { return 1; },
                          records: function (obj) { return obj.d.length; }
                      }
              });

下面是我从 Vb.NET 中的 URL 调用它的函数。

  <WebMethod> _
     <ScriptMethod(UseHttpGet:=True, ResponseFormat:=ResponseFormat.Json)> _
    Public Shared Function GetFormsData(CategoryId As String) As List(Of Dictionary(Of String, String))


        Using dt As DataTable = DirectCast(DataAccess.ExecuteStoredProcedure("AFI_DYNAMIC", "Ashley.dbo.usp_GetDownloadFormsDetails", DataAccess.StoredProcedureReturnType.DataTable), DataTable)
            Dim serializer As New System.Web.Script.Serialization.JavaScriptSerializer()
            Dim rows1 As New List(Of Dictionary(Of String, String))()
            Dim rows As New List(Of Dictionary(Of String, Object))()
            Dim row As Dictionary(Of String, Object)
            Dim row1 As Dictionary(Of String, String)
            For Each dr As DataRow In dt.Rows
                row = New Dictionary(Of String, Object)()
                row1 = New Dictionary(Of String, String)()
                For Each col As DataColumn In dt.Columns
                    row.Add(col.ColumnName, dr(col))
                    'string sb = "<a href=\"http://www.yahoo.com\" title=\"Yahoo!\">Yahoo!</a>";
                Next
                rows.Add(row)
                'For i As Integer = 0 To dt.Columns.Count - 1
                Dim sb As String = "<a href=" & """" & dr("FormPath").ToString() & """" & ">" & dr("FormName").ToString() & "</a>"
                'Next
                row1.Add(dt.Columns(0).Caption, sb)
                rows1.Add(row1)

            Next
            Return rows1
        End Using
    End Function

现在我想在后面的代码中访问 CategoryId 有人可以帮我解决这个问题吗?

【问题讨论】:

  • 嗨@Oleg,我在最后提到了很多例子,我很困惑,没有任何帮助。我看到您提到使用 postData 进行 jqgrid 调用。但没有任何结果。你能帮我解决这个问题吗?

标签: vb.net jqgrid


【解决方案1】:

代码有很多问题。我在下面发布了一些通过阅读代码可以发现的明显问题:

  • CategoryId 是 parent 网格的列吗? $('#tblFormData') 是父网格吗?在这种情况下,您可以使用$(this) 而不是$('#tblFormData')。
  • 您将pager_id 用作子网格寻呼机的&lt;div&gt; 的id,但为pager_id 分配值的行已注释且id 为undefined。而不是你使用 pager:"#tblSubpager" 这是错误的。
  • jqGrid 没有contentType 参数。所以你应该删除它。取而代之的是,您已经将 ajaxGridOptions 参数与 contentType 一起使用。这是正确的参数。
  • 您使用data: '{"CategoryDesc":"' + selected_row_id + '"}',,但服务器代码期望参数名称为CategoryId,而不是CategoryDesc。顺便说一句,jqGrid 在使用datatype: "json" 的情况下没有data 参数。你的意思应该是postData。正确的将是使用
postData: {
    CategoryId: selected_row_id
}

【讨论】:

  • 嗨@Oleg 我已经添加了下面的答案作为我的cmets。我知道我的代码有问题。但是我花了很多时间来研究它。
  • @Parthhu:您的代码仍然包含我在回答中描述的寻呼机的错误。关于参数的发送:您应该将mtype: "POST" 作为附加选项添加到子网格以使用 HTTP POST 而不是 GET。如果您使用serializeGridData: function (postData) {return JSON.stringify(postData);},则需要它。 UseHttpGet:=True 也需要在案例中删除。或者,您可以删除 serializeGridData 或使用 serializeGridData: function (postData) {return {CategoryId: JSON.stringify(selected_row_id) }; } 而不使用任何 postData。
  • @Parthhu:无论如何,如果您需要将数据发布到 WebMetod,您应该像 JSON.stringify({CategoryId: selected_row_id}) 这样对数据进行编码。如果您需要使用 HTTP GET,那么您需要使用{CategoryId: JSON.stringify(selected_row_id)}。在某些情况下(取决于selected_row_id 的类型,例如是否为整数)JSON.stringify(selected_row_id) 与selected_row_id 相同。在这种情况下,您可以使用{CategoryId: selected_row_id}
  • 是的@Oleg,它只是一个简单的整数,我已经按照你说的尝试过。我已经添加了 Stringify 和所有内容。不知道它无论如何都没有击中。它只包含“1”作为值。
  • 您声明了CategoryId As String,所以它不是整数。你应该使用{CategoryId: JSON.stringify(selected_row_id)}。如果您将CategoryId 声明为整数,那么{CategoryId: selected_row_id}({CategoryId: 1} 也可以使用)。您是否尝试过像我之前描述的那样使用 HTTP POST?这是 WebMethod 的标准方式。我建议您使用 IE/Chrome 或Fiddler 的开发者工具来查看 HTTP 流量。它有助于了解您发送到服务器的内容。
猜你喜欢
  • 2012-01-06
  • 2015-01-09
  • 2011-10-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-22
相关资源
最近更新 更多