Как создать JQuery Datatable с несколькими дочерними строками (вложенная таблица)? - PullRequest
0 голосов
/ 20 ноября 2018

Вопрос: Мне нужно создать таблицу с форматом вложенной таблицы.Когда пользователь нажимает кнопку «плюс», он должен показывать вложенную таблицу.Если они нажмут кнопку минус, она должна скрыться.

Я сделал jquery datatable, он работает нормально.но я не могу отобразить несколько строк для дочерней таблицы.Я пробовал столько раз, что не могу отобразить правильный формат.

Это ссылка, на которую я ссылался, чтобы создать таблицу https://datatables.net/examples/api/row_details.html

База данных: Фактические данные поступают из базы данных в соответствии с приведенным ниже форматом, и я преобразовал формат JSON для отображения: enter image description here

C # Код :

 return new JsonResult { Data = new { data = test }, JsonRequestBehavior = 
JsonRequestBehavior.AllowGet };

Мне нужен такой вывод с вложенной таблицей: enter image description here

КОД UI:

/* Formatting function for row details - modify as you need */
 function format ( d ) {
   // `d` is the original data object for the row
  return '<table cellpadding="5" cellspacing="0" border="0" style="padding- 
left:50px;">'+
      '<tr>' +
            '<td>City Name</td>' +
            '<td>Permission</td>' +
        '</tr><tr>' +
            '<td>' + d.City+ '</td>' +
            '<td>' + d.Permission+ '</td>' +
        '</tr>' +
'</table>';
}

$(document).ready(function() {
var table = $('#example').DataTable( {
    "ajax": "../ajax/data/objects.txt",
    "columns": [
        {
            "className":      'details-control',
            "orderable":      false,
            "data":           null,
            "defaultContent": ''
        },
        { "data": "UserName" },
        { "data": "Email" },
        { "data": "UserId" },

    ],
    "order": [[1, 'asc']]
} );

// Add event listener for opening and closing details
$('#example tbody').on('click', 'td.details-control', function () {
    var tr = $(this).closest('tr');
    var row = table.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(row.data()) ).show();
        tr.addClass('shown');
    }
  } );
 } );

ФОРМАТ JSON:

{"data":[
{"UserId":"ABC","UserName":"Peter","Email":"abc@gmail.com.com","CityName":"Chennai","Permission":"Manager,LocalUser"},
{"UserId":"ABC","UserName":"Peter","Email":"abc@gmail.com.com","CityName":"Bangalore","Permission":"Admin,LocalUser"},
{"UserId":"xyz","UserName":"Haiyan","Email":"abc2@gmail.com.com","CityName":"Bangalore","Permission":"LocalUser"},
{"UserId":"xyz","UserName":"Haiyan","Email":"abc2@gmail.com.com","CityName":"Chennai","Permission":"LocalUser,Manager"}]}

Используемая технология: ASP.Net MVC5

. Любым другим способом я готов использовать linq или изменить формат данных JSON.

1 Ответ

0 голосов
/ 20 ноября 2018

Вы можете присвоить идентификатор вашей дочерней таблице следующим образом

function format ( d ) {
   // `d` is the original data object for the row
  return '<table id="childtable" cellpadding="5" cellspacing="0" border="0" style="padding- 
left:50px;">'+
      '<tr>' +
            '<td>City Name</td>' +
            '<td>Permission</td>' +
        '</tr><tr>' +
            '<td>' + d.City+ '</td>' +
            '<td>' + d.Permission+ '</td>' +
        '</tr>' +
'</table>';
}

и сделать то же самое, что вы сделали для своей родительской таблицы

var childTable = $('#childtable').DataTable( {
    "ajax": "../ajax/data/objects.txt",
    "columns": [

    ],
    "order": [[1, 'asc']]
} );

связать свой объект json в разделе столбцов.

...