Как добавить строку в Dataatable? - PullRequest
0 голосов
/ 12 сентября 2018

Мне нужно добавить строку в datatable, но число столбцов является переменным.

Я пробую по два каждый, но не запускаю, потому что row.add нужна вся строка не от 1 до 1.

var obj = $.parseJSON(res);
       $.each(obj, function (index) {
            $.each(obj[index], function (value) {
                table.row.add([obj[index][value]]).draw();
            });
        });

Можно ли добавить строку, не зная количества столбцов?

Ответы [ 3 ]

0 голосов
/ 12 сентября 2018

Во-первых, в вашем скрипте есть ошибка, возможно, опечатка, после [obj] [index] [value] "]" есть дополнительная квадратная скобка.

var obj = $.parseJSON(res);
   $.each(obj, function (index) {
        $.each(obj[index], function (value) {
            table.row.add(
               [obj[index][value]  >]<-- One too many brackets   ).draw();
   });
});

Тогда мое предложение.

Сначала я делаю двух маленьких помощников ...

Один для подсчета количества столбцов:

$.fn.DTbl_columnCount = function () {
    return $('th', $(this).find('thead')).length;
};

И так как я понятия не имею, какие данные поступают, следующий - это все пояса и пряжки, ну, в «любой» версии, которая также принимает массивы;)

$.fn.DTbl_createDataColumns = function (whatever) {
    var temp = new Array($(this).DTbl_columnCount());
    var value = "";
    var type = jQuery.type(whatever);
    var isArray = (type == "array");
    if (!isArray && type != undefined) 
        value = whatever;
    for (var i = 0; i < temp.length; i++) {
        if (isArray) 
            if (whatever.length > i)
                value = whatever[i];
        temp[i] = '' + value;
        value = "";
    }
    return temp;
};

И затем к вашей проблеме, поскольку эти дополнения на самом деле не являются частью DataTables, нам нужно извлечь DataTable Id в вызове функции DTbl_createDataColumns, здесь используя стандартную ссылку "#example".

var obj = $.parseJSON(res);
$.each(obj, function (index) {
    $.each(obj[index], function (value) {
        table.row.add(
           $("#example").DTbl_createDataColumns([obj[index][value])
        ).draw();
    });
});

Так что это также будет работать:

var myArray = ["Dodaa", "Dodee"];
table.row.add(  $("#example").DTbl_getDataColumns(myArray) );
0 голосов
/ 29 апреля 2019
table.row.add(['a','b','','d']).draw() 

не работает для меня.

Мне нужно сделать

table.row.add([['a','b','','d']]).draw()

Также важно быть согласованным между типами данных словаря и массива.DataTable не нравится, если мы смешиваем диктонары и массивы в разных вызовах.Например, нам может потребоваться сделать это (если оно инициализируется массивом словарей).

table.row.add([{'hdrCol1': 'a', 'hdrCol2':'b','hdrOfCol3':'', 'hdrCol4':'d'}]).draw()
0 голосов
/ 12 сентября 2018

Редактировать: То есть, если у вас переменное число столбцов, единственный способ, которым вы все еще могли бы использовать данные, скорее всего, это вставка пустых значений в столбцы строк, которые не имеют максимального количества значений,Например:

table.row.add(['a','b','c','d']).draw();
//Above is a row which has all the 4 column values
//Beneath is a row with 3 out of 4 column values
table.row.add(['a','b',null,'d']).draw() 
/*or*/ 
table.row.add(['a','b','','d']).draw()

Я не совсем уверен, откуда у вас идея, что row.add () нужно все строки , добавленные одновременно.https://datatables.net/reference/api/row.add() в соответствии с официальной документацией этот метод может добавлять отдельные строки в вашу таблицу без каких-либо проблем.

Здесь JSFiddle, доказывающий, что одна строка может быть добавлена ​​куже существующие: myTable.row.add(["Airi Satou", "This was", "added", "later", "EXAMPLE", "ITEM"]).draw(); http://jsfiddle.net/bbLjzspf/8709/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...