2015-05-08 12 views
7

Tôi đang cố ràng buộc một bảng con với một bảng cha. Tôi không thể tìm ra cách này có thể được thực hiện khi dữ liệu cho bảng con đang đến thông qua một cuộc gọi AJAX mà sau đó tạo ra một bảng năng động.Hàng con trong DataTables sử dụng AJAX

Tôi đã theo dõi this

Dưới đây là mã của tôi.

$('#myTable tbody).on('click', 'td.details-control', function() { 

     var tr = $(this).closest('tr'); 
     var row = $('#myTable').DataTable().row(tr); 

     if (row.child.isShown()) { 
      // This row is already open - close it 

      row.child.hide(); 
      tr.removeClass('shown'); 
     } 
     else { 
      // Open this row 

      row.child(format()).show(); 
      tr.addClass('shown'); 
     } 
    }); 

function format() { 

    $.ajax({ 
     type: 'GET', 
     url: '@Url.Action("MyFunction", "Home")', 
     data: { "Id": MyId }, 
     dataType: "json", 
     async: false, 
     success: function (data) { 
      var list = data; 
      $.each(list, function (index, item) { 

       return '<table>.......<table />'; 

       //i need to loop across the list and create a dynamic table with tr and td 


      }); 
     }, 
     error: function (result) { 
      var error = JSON.stringify(result); 
      throw "Error..."; 
     } 
    }); 
} 
+0

Các bạn đã thử chỉ thêm những hàng mới vào bảng hiện hành? – krillgar

+0

Tôi đã thêm một số dữ liệu tĩnh chỉ để bắt đầu và nó hoạt động tốt. Tuy nhiên, tôi lấy dữ liệu từ cơ sở dữ liệu và cần sử dụng cuộc gọi AJAX. Tôi không thể định dạng 'bảng động' bằng các mục trong danh sách. – user2281858

+0

Thay vì trả lại các hàng vào hàm khác, tôi sẽ thêm chúng trực tiếp vào bảng. – krillgar

Trả lời

5
$('#myTable tbody').on('click', 'td.details-control', function() { 

    var tr = $(this).closest('tr'); 
    var row = $('#myTable').DataTable().row(tr); 

    if (row.child.isShown()) { 
     // This row is already open - close it 

     row.child.hide(); 
     tr.removeClass('shown'); 
    } 
    else { 
     format(row.child); // create new if not exist 
     tr.addClass('shown'); 
    } 
}); 

và sau đó là format() sẽ

function format(callback) { 
    $.ajax({ 
     .... 
     //async: false, you can use async 
     success: function (data) { 
      var list = data; 
      var html = ''; 
      $.each(list, function (index, item) { 
       ... 
       //create <tr> <td> with loop 
       html= '<tr><td>.......</tr>'; 
      }); 
      callback($('<table>' + html + '</table>')).show(); 
     }, 
     ... 
    }); 
} 

bản demo đây jsfiddle

+0

bất kỳ fiddle để tham khảo ... ?? hoặc bất kỳ liên kết nào có thể là một ví dụ cho điều này .. ?? – user2281858

+1

đã thêm câu trả lời để trả lời – Jag

+0

@JAG thấy ur jsfiddle. Tôi muốn bao gồm một phần css trong html. Làm thế nào để làm điều đó? (m mới cho web). vui lòng trả lời. – NightFurry

Các vấn đề liên quan