2015-06-01 1 views
0

Я использую составную jquery datatables.net. Я создаю свой стол, но когда я хотел бы добавить строку «вручную», строка не добавляется в конце таблицы. Я вижу, что после добавления строки таблицы моя консоль.log (данные) в Render 'Email' отображает '123', но строка не добавляется.Datatables.net добавить строку не работает

Мой код JavaScript:

$(document).ready(function() { 
    var $select = $('<select id="selectoption"></select>'); 
    var $checkbox = $('<div class="container"></div>'); 
    var $input = $('<input type="text">'); 
    var $span = $('<span></span>'); 
    var table = $('#griduser').DataTable({ 
     "processing": true, 
     "serverSide": true, 
     "dom": '<"toolbar">frtip', 
     "ajax": { 
      "url": "/User/ReadUserTest/", 
      "dataType": "json" 
     }, 
     columns: [ 
      {"data": "Delete"}, 
      {"data": "Id", 
       render: function (data, type, row, meta) { 
        var $clone = $span.clone(); 
        $clone.attr("id", "userid"); 
        $clone.append('<label>' + data + '</label>'); 
        return $clone.wrap('<span></span>').parent().html(); 
       } 
      }, 
      {"data": "UserName", 
       render: function (data, type, row, meta) { 
        var $clone = $input.clone(); 
        $clone.attr("id", "userid"); 
        $clone.attr('value', data); 
        return $clone.wrap('<div></div>').parent().html(); 
       } 
      }, 
      {"data": "Login", 
       render: function (data, type, row, meta) { 
        console.log(data); 
        var $clone = $input.clone(); 
        $clone.attr("id", "userlogin"); 
        $clone.attr('value', data); 
        $clone.val(data.Login); 
        return $clone.wrap('<div></div>').parent().html(); 
       } 
      }, 
      {"data": "Email", 
       render: function (data, type, row, meta) { 
        var $clone = $input.clone(); 
        $clone.attr("id", "email"); 
        $clone.attr('value', data); 
        $clone.val(data.Email); 
        return $clone.wrap('<div></div>').parent().html(); 
       } 
      }, 
      {"data": "Save"} 
     ] 
     , 
     "columnDefs": [ 
      {"targets": -1, 
       "data": null, 
       "defaultContent": "<input type='image' id='saverole' src='/images/save.png' alt='Submit' width='48' height='48'>" 
      }, 
      {"targets": 0, 
       "data": null, 
       "defaultContent": "<input type='image' id='saverole' src='/images/remove.png' alt='Submit' width='48' height='48'>" 
      } 
     ], 
     "initComplete": function (settings, json) { 
      table.row.add({ 
       Delete: 'delete123', Id: 'id123', UserName: 'name123', Login: 'login123', Email: 'email123', Save: 'save123' 
      }).draw();     
     }, 
    }); 
}); 

Json данные:

{"sEcho":null,"iTotalRecords":2,"iTotalDisplayRecords":2,"aaData":  
[{"Id":"09b90bca-7bf5-4956-91c9- 0d7cee180ba5","UserName":"[email protected]","Login":"[email protected]","Email":" [email protected]"}, 
{"Id":"86f9eabd-ec1e-40b1-af5b- fea899d4c1c0","UserName":"[email protected]","Login":"[email protected]"," Email":"[email protected]"}]} 

И мой HTML код:

<table id="griduser" class="display" cellspacing="0" width="100%"> 
    <thead> 
     <tr> 
      <th></th> 
      <th>Id</th> 
      <th>Nom</th> 
      <th>Login</th> 
      <th>Email</th> 
      <th></th> 
     </tr> 
    </thead> 

    <tfoot> 
     <tr> 
      <th></th> 
      <th>Id</th> 
      <th>Nom</th> 
      <th>Login</th> 
      <th>Email</th> 
      <th></th> 
     </tr> 
    </tfoot> 
</table> 

Спасибо за вашу помощь

Update:

Ошибка с oninitcomplete:

-in яваскрипта qjuery.datatables.js (строка 2022):

var aoData = oSettings.aoData[ iDataIndex ]; 
if (aoData.nTr === null) 
{ 
_fnCreateTr(oSettings, iDataIndex); 
} 

-in console.log ошибки: Uncaught TypeError: Не удается прочитать свойство 'НТР' из неопределенный

ответ

2

Добавление объекта/буквальным как это

table.row.add({ 
    Login: '123', Email: '123', Id: '123', Save: '123', UserName: '123' 
}).draw(); 

правильна если вы определили правильные крепления data в columns, как вы на самом деле сделали выше. Тем не менее, вы должны хотя бы иметь те же свойства в объекте, который вы собираетесь вставить, как вы определили в columns. dataTables будет искать каждое связывание data в объекте и не вставляться, если некоторые свойства отсутствуют. Delete отсутствует объект:

table.row.add({ 
    Delete: 'something', Login: '123', Email: '123', Id: '123', Save: '123', UserName: '123' 
}).draw(); 

должен работать.

+0

Я использую ваш код, но теперь добавляется строка. Если я сменил Datatables на «datatables», у меня есть ошибка. Я пытаюсь добавить рендеринг моих данных столбца и сохранить как другие, но это не работает. Я определил столбцы save и delete, потому что мне нужно добавить кнопку в эту ячейку. – Zoners

+0

@ Zoners - кроме того, у вас есть ошибка в вашем JSON, '' Email "' должен быть '' Email "' - и при условии, что код, который вы на самом деле это код, который вы используете, тогда он работает -> ** http: //jsfiddle.net/cuwpmwmr/**. Я предполагаю, что причина, по которой вы _now_ испытываете относительно 'add()', связана с асинхронностью javascript. Таблица не завершена, инициализируется перед 'table.row.add()', потому что вы используете данные сервера, но она будет работать, если вы позже добавите '(при нажатии кнопки) и т. Д. Докажите это, поставив' table.add 'в [initComplete] (https://datatables.net/reference/option/initComplete) – davidkonrad

+0

Извините, я был в отпуске :). Я принимаю ваш ответ, потому что демонстрационная работа. Но я пытаюсь использовать «initComplete», я вижу, что все мое поле завершено, и после того, как функция initcomplete является вызовом, я использую table.row.add, но у меня всегда есть ошибка. «Я обновляю свой пост – Zoners

-1

надстройку Funtion принимает список в параметре не dictionnary, используйте

table.row.add([ 
     'Login Value','Email Value','Id Value', 'Save Value', 'UserName Value' 
    ] 
    ).draw(); 

Используя этот метод, значения должны быть в том же порядке, что и столбцы таблицы. Это Exemple предполагает, что ваша таблица выглядит следующим образом:

__________________________________________________ 
|--login--|--email--|--id--|--save--|--username--| 

EDIT

С HTML кодом, я могу видеть, у вас есть 6 колонок, когда вы добавляете строку, вы должны определить значение для каждого столбца, как так:

table.row.add([ 
    "", "09b90bca-7bf5-4956-91c9- 0d7cee180ba5", "[email protected]", "[email protected]", "[email protected]", "" 
] 
).draw(); 
+0

У меня есть эта ошибка 'Uncaught TypeError: Не удается прочитать свойство' Login 'undefined', и это возможно изменить рендер, когда я добавляю строку? Я обновляю сообщение на примере json и html – Zoners

+0

. Я отредактировал свой ответ на основе кода, который вы добавили. – jumojer

+0

Если я использую ваш последний ответ, то не добавляется строка, а не передается в рендеринг, но если я использую этот «table.row».add ({ Логин: '123', Электронная почта: '123', Id: '123', Сохранить: '123', UserName: '123' } ) .draw(); "строка не добавлена, но мы передать в рендере – Zoners