Сохранить данные из таблицы HTML - PullRequest
0 голосов
/ 25 февраля 2020

Я работаю с MVC и создаю динамическую c таблицу в виде данных из @ Html .TextBoxFor добавлен, что у меня есть на мой взгляд, и пока все хорошо

Мой Вопрос в том, можно ли сохранить созданную мной таблицу с помощью функции JS?

Поиск в Интернете Я нашел несколько примеров, но пока у меня ничего не работает

Моя таблица

<table id="mytable" class="table table-bordered table-hover ">
        <tr bgcolor="#90A8D0">
            <th>Proyecto</th>
            <th>Cuenta</th>
            <th>Sub Cuenta</th>
            <th>Beneficiario</th>
            <th>Tipo de Pago</th>
            <th>Pago en el proyecto</th>
            <th>Pago Por México</th>
            <th>Tarjeta Usuario</th>
            <th>Total de Remesa</th>
            <th>Obersvaciones</th>
            <th>Eliminar</th>

        </tr>
    </table>

Итак, я создаю свою динамическую c таблицу:

$(document).ready(function() {
    $('#adicionar').click(function () {
        debugger;
        var Proyecto = $("#ProyectoID option:selected").text();
        var Recurso = $("#RecursoID option:selected").text();
        var SubRecurso = $("#SubRecursoID option:selected").text();
        var Beneficiario =  document.getElementById("Beneficiario").value;
        var TipoPago = $("#TipoPagoID option:selected").text();
        var PagoProyecto = document.getElementById("PagoProyecto").value;
        var PagoMexico = document.getElementById("PagoMexico").value;
        var TarjetaUsuario = document.getElementById("TarjetaUsuario").value;
        var TotalRemesa =  parseInt(PagoProyecto) + parseInt(PagoMexico) + parseInt(TarjetaUsuario);
        var ObervacionesCuenta = document.getElementById("ObervacionesCuenta").value;
        var i = 1; //contador para asignar id al boton que borrara la fila
        var fila = '<tr id="row' + i + '"><td>' + Proyecto + '</td><td>' + Recurso + '</td><td>' + SubRecurso + '</td><td>' + Beneficiario + '</td><td>' + TipoPago + '</td><td>' + PagoProyecto + '</td><td>' + PagoMexico + '</td><td>' + TarjetaUsuario + '</td><td>' + TotalRemesa + '</td><td>' + ObervacionesCuenta + '</td><td><button type="button" name="remove" id="' + i + '" class="btn btn-danger btn_remove">Quitar</button></td></tr>'; //esto seria lo que contendria la fila

i++;

$('#mytable tr:first').after(fila);
$("#adicionados").text(""); //esta instruccion limpia el div adicioandos para que no se vayan acumulando
var nFilas = $("#mytable tr").length;
$("#adicionados").append(nFilas - 1);
//le resto 1 para no contar la fila del header
document.getElementById("Recurso").value ="";
document.getElementById("SubRecurso").value = "";
document.getElementById("Proyecto").value = "";
document.getElementById("Proyecto").focus();
});
$(document).on('click', '.btn_remove', function () {
var button_id = $(this).attr("id");
//cuando da click obtenemos el id del boton
$('#row' + button_id + '').remove(); //borra la fila
//limpia el para que vuelva a contar las filas de la tabla
$("#adicionados").text("");
var nFilas = $("#mytable tr").length;
$("#adicionados").append(nFilas - 1);
});
});

Это пример, который я нашел в Интернете:

$(function () {
debugger;
$('#mytable').each(function () {
var cuotaNo= $(this).find('td').eq(0).html();
var interes = $(this).find('td').eq(1).html();
var abonoCapital = $(this).find('td').eq(2).html();
var valorCuota = $(this).find('td').eq(3).html();
var saldoCapital = $(this).find('td').eq(4).html();

$.ajax({
 async: false,
 type: "POST",
 url: "../Guardardatos",
    data:"cuotaNo="+cuotaNo+"&interes="+interes+"&abonoCapital="+abonoCapital+"&valorCuota="+valorCuota+"&saldoCapital="+saldoCapital,
 data: {valores:valores},
 success: function(data) { if(data!="");}
});
});
});

Поскольку последний пример - это то, что Я пытаюсь сохранить данные, созданные в моей таблице

1 Ответ

0 голосов
/ 25 февраля 2020

В этом примере создайте классы TableView, TableRowView и TableCellView. Каждый класс возвращает объект со свойством element и методом render*. TableView.element использует таблицу из вашего примера. TableRowView.element и TableCellView.element оба создают новые элементы.

После того, как данные из формы (не показанной в вашем примере) POSTED и обратный вызов success выполняется: сначала создайте новый экземпляр TableView; во-вторых, создайте новый экземпляр TableRowView; в-третьих, создайте новые экземпляры TableCellView для каждого свойства data, а затем отобразите значение свойства внутри него.

Чтобы убедиться, что отображается правильный порядок элементов данных, используйте columnOrder для определения имен ячеек таблицы, итерируйте их в обратном вызове onSuccess. На каждой итерации используйте имя столбца для доступа к соответствующему свойству data.

const columnOrder = [
  'proyecto', 
  'cuenta',
  'subCuenta',
  'beneficiario',
  'tipoPago',
  'pagoProyecto',
  'pagoMexico',
  'tarjetaUsuario',
  'totalRemesa',
  'obersvaciones',
  'elminar',
]
const TableView = () => {
  let table = document.getElementByID('myTable')
  return {
    element: table,
    renderTableRow: (element) => {
      this.element.appendChild(element)
      return this
    }
  }
}
const TableRowView = () => {
  let tr = document.createElement('tr')
  return {
    element: tr,
    renderTableCell: (element) => {
      this.element.appendChild(element)
      return this
    },
  }
}
const TableCellView = () => {
  let td = document.createElement('tr')
  return {
    element: td,
    render: (value) => {
      this.element.innerHTML = value
      return this
    },
  }
}
const onSuccess = (event) => {
  let data = event.data
  /*
    data
    -----
    {
      'proyecto': ??, 
      'cuenta': ??,
      'subCuenta': ??,
      'beneficiario': ??,
      'tipoPago': ??,
      'pagoProyecto': ??,
      'pagoMexico': ??,
      'tarjetaUsuario': ??,
      'totalRemesa': ??,
      'obersvaciones': ??,
      'elminar': ??,
    }
  */
  let table = new TableView()
  let row = new TableRow()
  columnOrder.forEach((columnName) => {
    let cell = new TableCellView()
    let cellData = data[columnName]
    cell.render(cellData)
    row.renderTableCell(cell.element)
    table.renderTableRow(row.element)
  })
}
$.ajax({
  ...,
  success: onSuccess,
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...