我正在使用Knex,electron和JavaScript从Sqlite3表中提取所有数据,并且希望对Knex查询或HTML / JavaScript端中的列进行重新排序。
我的sqlite3数据库具有以下标头数据:
id|Role|Password|Reference
使用以下代码,该表按以下顺序显示:
Password|Reference|Role|id
我试图在Knex中使用.orderBy方法,并且还试图在JavaScript中重新排序,但是我似乎无法对列进行重新排序。
电子方面,我有:
ipcMain.on('getUserTable:all', (event) => {
let getUserTable =
knex('User').select(['id','Role','Reference','Password']).orderBy('Role');
getUserTable.then(function(tableData){
newWin.webContents.send("userResultSent", tableData);
});
});
在HTML方面,我有:
ipc.on('userResultSent', (event, tableData) => {
var html = '<table>';
html += '<tr>';
for( var j in tableData[0] ) {
html += '<th>' + j + '</th>';
}
html += '</tr>';
for( var i = 0; i < tableData.length; i++) {
html += '<tr>';
for( var j in tableData[i] ) {
html += '<td>' + tableData[i][j] + '</td>';
}
}
html += '</table>';
document.getElementById('db_output_container').innerHTML = html;
});
我希望能够查询数据库,以便数组按照表中的确切顺序显示。
答案 0 :(得分:0)
在第二个for循环的结尾,您应该关闭tr标记。确实,您在第二个for循环之后立即打开了它,但没有关闭它。 我尚未测试过,但应该可以。
您的html文件应如下所示。
ipc.on('userResultSent', (event, tableData) => {
var html = '<table>';
html += '<tr>';
for( var j in tableData[0] ) {
html += '<th>' + j + '</th>';
}
html += '</tr>';
for( var i = 0; i < tableData.length; i++) {
html += '<tr>';
for( var j in tableData[i] ) {
html += '<td>' + tableData[i][j] + '</td>';
}
html += '</tr>'; /* i added this line here */
}
html += '</table>';
document.getElementById('db_output_container').innerHTML = html;
});
答案 1 :(得分:0)
当前方法的问题是对象是无序的属性包。因此,对列的排序方式没有关系-无法保证属性的排序。
如果您需要特定的订单,则可以改用Array
。
由于您具有显示表格数据的通用代码,因此可以执行以下操作
ipcMain.on('getUserTable:all', (event) => {
const columns = ['id','role','reference','password']
let getUserTable =
knex('User').select(columns).orderBy('role');
getUserTable.then(function(tableData){
newWin.webContents.send("userResultSent", {columns, tableData});
});
});
创建html时
ipc.on('userResultSent', (event, {columns, tableData}) => {
var html = '<table>';
html += '<tr>';
columns.forEach(column => {
// if you want to capitalize names just do it here
html += '<th>' + column + '</th>';
})
html += '</tr>';
for( var i = 0; i < tableData.length; i++) {
html += '<tr>';
columns.forEach(column => {
html += '<td>' + tableData[i][column] + '</td>';
})
html += '</tr>';
}
html += '</table>';
document.getElementById('db_output_container').innerHTML = html;
})