在我的公司,我们目前使用Excel来维护用于成本估算的相当大的项目数据库。
我正在构建一个电子应用程序,用一个简单的数据库和一些用户友好的表单和报告来代替它。
现在,我有一个包含2个表的SQLite数据库:
materials
walls
在某些时候会有更多的补充。我没有为每个添加的表添加表html,而是想循环遍历数据并动态构建表。
以下是该应用应该是什么样子的截图(使用预编码列):
我遍历了' sqlite_master' table用于获取左侧菜单的每个表的名称。然后我使用每个表名(row.name)来调用另一个获取每个表的列名的函数,然后我将其输入到表中,所以我得到了这个:
在我走到这一步之后,我需要遍历表并在右侧窗格中显示它。如果我已经知道了列名,我可以对其进行预编码并循环遍历每一行,但我需要能够动态添加/删除列和表(类似于excel工作簿),因此对它们进行预编码只是不是&#39 ;是一个选择。
我总是讨厌这部分,因为我知道这足以搞砸了。
我想我需要获取每列的列表,然后添加类似于
的行let rowInfo = "<td>" + {{colName}} + "</td>" //WHERE THIS WOULD BE A LIST OF ALL COLS
for (i = 0; i <= col.length; i++) {
$("#tableRows").append(rowInfo);
}
但我不知道如何从这里到达那里。
function getMaterials() { // This is what I use to get the data from Image 1
let sqlite3 = require( 'sqlite3' ).verbose();
let db = new sqlite3.Database( 'quoteTemplate.db' );
db.each( "SELECT * FROM materials", function ( err, row ) {
let table = document.getElementById( "materialsTable" );
let tableRow = table.insertRow( 0 );
let cell1 = tableRow.insertCell( 0 );
let cell2 = tableRow.insertCell( 1 );
let cell3 = tableRow.insertCell( 2 );
let cell4 = tableRow.insertCell( 3 );
let cell5 = tableRow.insertCell( 4 );
let cell6 = tableRow.insertCell( 5 );
let cell7 = tableRow.insertCell( 6 );
let cell8 = tableRow.insertCell( 7 );
let cell9 = tableRow.insertCell( 8 );
let cell10 = tableRow.insertCell( 9 );
let cell11 = tableRow.insertCell( 10 );
let cell12 = tableRow.insertCell( 11 );
cell1.innerHTML = row.id;
cell2.innerHTML = row.item;
cell3.innerHTML = row.material;
cell4.innerHTML = row.type;
cell5.innerHTML = row.price;
cell6.innerHTML = row.freight;
cell7.innerHTML = row.width;
cell8.innerHTML = row.length;
cell9.innerHTML = row.height;
cell10.innerHTML = row.thickness;
cell11.innerHTML = row.weight;
cell12.innerHTML = row.weightper;
} );
db.close();
}
function getTablesList() { // This gets the tables for the left pane
let sqlite3 = require( 'sqlite3' ).verbose();
let db = new sqlite3.Database( 'quoteTemplate.db' );
let list = $( "#tablesList" );
db.each( "SELECT name FROM sqlite_master WHERE type='table' AND name != 'sqlite_sequence' AND name != 'lorem'", function ( err, row ) {
let activeChk = "";
if(row.name == 'materials') {
activeChk = "active";
}
list.append( '<span class="nav-group-item ' + activeChk + ' " onclick="getName(\'' + row.name + '\')">' + row.name + "</span>" );
} );
db.close();
}
function getName( table ) { // This gets the header row
let sqlite3 = require( 'sqlite3' ).verbose();
let db = new sqlite3.Database( 'quoteTemplate.db' );
let mainTableHeader = document.getElementById( "materialsTableHeader" );
$( "#materialsTableHeader tr" ).remove();
$( "#materialsTable tr" ).remove();
let tableHeaderRow = mainTableHeader.insertRow( 0 );
db.each( "PRAGMA table_info('" + table + "')", function ( err, row ) {
let cell = tableHeaderRow.insertCell( 0 );
cell.outerHTML = "<th>" + row.name + "</th>";
} );
db.close();
getRows( table );
}
function getRows( tableName ) { // This is where I want to get the table data
let sqlite3 = require( 'sqlite3' ).verbose();
let db = new sqlite3.Database( 'quoteTemplate.db' );
let mainTable = document.getElementById( "materialsTable" );
// I need the code that would go here
db.close();
}
与往常一样,任何建议都不仅仅是值得赞赏的。我意识到我可能会问一些基本的东西,但它是不是总是如此?我们可以在诸如构建复杂用户界面等困难事物中表现出色(ha!),但我们会在简单易懂的事情上发挥作用。
答案 0 :(得分:0)
好的......我明白了......
function getRows( tableName ) {
let sqlite3 = require( 'sqlite3' ).verbose();
let db = new sqlite3.Database( 'quoteTemplate.db' );
let mainTable = document.getElementById( "materialsTable" );
db.each( 'SELECT * FROM ' + tableName, [], function ( tx, results ) {
let tableRow = mainTable.insertRow( 0 );
$.each(results, function(key, value){
let cell = tableRow.insertCell( 0 );
cell.outerHTML = "<td>" + value + "</td>";
});
} );
db.close();
}
我知道这很简单。