0

ローカル データベースからデータを取得し、カスタム行を使用するテーブルビューに表示しようとしています。うまく表示させる方法がわかりません。現在の書き込み方法では、データが正しく表示された 1 つの行が表示されますが、何千もの空の行が表示されているように見えます。私の問題は、2つのwhile (rows.isValidRow())ステートメントがあるためだと思います。この表示を正しく行うためのコードを教えてください。これが私の現在のコードです:

//Setup the window
var win = Titanium.UI.currentWindow;
win.barColor='#000000';

//install database
var db = Ti.Database.install('bcapool3.sqlite','distributor');

//Get data
var rows = db.execute('SELECT * FROM distributor');

// create table view
var tableview = Ti.UI.createTableView({
    backgroundColor:'transparent',
    color: '#000000',
    top:80,
    height:'auto',
    left:80,
    right:80,
    bottom:120
});


function setData() {

while (rows.isValidRow())
{
var dataArray = [];
var row = Ti.UI.createTableViewRow({
    haschild: true,
    path: 'distributordetail.js'
});
    var title = Ti.UI.createLabel({ 
    color:'#000000',
    height:32,
    left:5,
    top:2,
    font:{fontSize:'18dp',fontWeight:'bold' },
    backgroundColor:'transparent',
    text:'' + rows.fieldByName('distributor_name') + ''
    });

    var address = Ti.UI.createLabel({   
    color:'#000000',
    height:32,
    left:5,
    top:34,
    fontSize:'14dp',
    backgroundColor:'transparent',
    text:'' + rows.fieldByName('distributor_address') + ''
    });

    var distance = Ti.UI.createLabel({  
    color:'#000000',
    height:32,
    right: 10,
    top:34,
    fontSize:'12dp',
    backgroundColor:'transparent',
    text:'' + rows.fieldByName('distance') + ''
    }); 

    row.add(title);
    row.add(address);
    row.add(distance);
    tableview.add(row);
    row.className = 'distributorRow';

    dataArray.push(row);
    rows.next();    
}

// set the array to the tableView
tableview.setData(dataArray);
}
}
4

1 に答える 1

2

そうです、2 while ループが問題を引き起こしています。また、行を dataArray に追加する必要があります。dataArray.push(row);

while ループの外側で、dataArray をデータとして tableView に設定します。tableview.setData(dataArray);

コードの一部を変更したところ、正常に動作しています。

//Setup the window
var win = Titanium.UI.createWindow({
    backgroundColor: '#123456',
});

//install database
var db = Ti.Database.open('distributor');
try{
    db.execute('create table if not exists distributor(id varchar(10), distributor_name varchar(10), distributor_address varchar(10), distance varchar(10));');
    db.execute("Insert into distributor values('id1','name1','address1','distance1')");
    db.execute("Insert into distributor values('id2','name2','address2','distance2')");
    db.execute("Insert into distributor values('id3','name3','address3','distance3')");
    db.execute("Insert into distributor values('id4','name4','address4','distance4')");
    db.execute("Insert into distributor values('id5','name5','address5','distance5')");
}
catch(err)
{
    Ti.API.info(err.message);

}



// create table view
var tableview = Ti.UI.createTableView({
    backgroundColor:'transparent',
    color: '#000000',
    top:80,
    height:'auto',
    left:80,
    right:80,
    bottom:120
});

setData();
win.add(tableview);
win.open();


function setData() {
    //db.open();
    var rows = db.execute('SELECT * FROM distributor');
    //db.close();
    var dataArray = [];
    while (rows.isValidRow())
    {
        var row = Ti.UI.createTableViewRow({
            haschild: true,
        });
        var title = Ti.UI.createLabel({ 
            color:'#000000',
            height:32,
            left:5,
            top:2,
            font:{fontSize:'18dp',fontWeight:'bold' },
            backgroundColor:'transparent',
            text:'' + rows.fieldByName('distributor_name') + ''
        });
        var address = Ti.UI.createLabel({   
            color:'#000000',
            height:32,
            left:5,
            top:34,
            fontSize:'14dp',
            backgroundColor:'transparent',
            text:'' + rows.fieldByName('distributor_address') + ''
        });
        var distance = Ti.UI.createLabel({  
            color:'#000000',
            height:32,
            right: 10,
            top:34,
            fontSize:'12dp',
            backgroundColor:'transparent',
            text:'' + rows.fieldByName('distance') + ''
        });
        row.add(title);
        row.add(address);
        row.add(distance);
        dataArray.push(row);
        rows.next();     
    }
    tableview.setData(dataArray);
}
于 2012-10-17T18:13:06.020 に答える