最近要寫一個程式,將資料庫中的資料生成TreeView,資料結構類似如下:
1 所有商品
10001 家用電器
100010001 電視機
100010002 冰箱
100010003 洗衣機
10002 廚房電器
100020001 洗碗機
100020002 微波爐
10003 電子產品
100030001 手持設備類
1000300010001 智能手機
1000300010002 掌上游戲機
資料的層數是沒有限制的,一直可以細分下去。
解決的方法思考和搜索了一下,網上一般是用遞回,遍歷TreeView樹,比較麻煩。
后來想到了一個簡單的辦法:
Tree->Items->Item[0]->Text = L"1"; //最頂級分類:所有商品
int nrow = 0, ncol = 0; //查詢陳述句回傳的結果集的行數,列數
char **Result; //指向回傳的資料集
for (int k = 0; k < Tree->Items->Count; k++){ //遍歷Tree樹,其中 Tree->Items->Count 是隱形增量,在函式中動態增加
UTF8String u = Tree->Items->Item[k]->Text + L"____";
q = "select typecode from alltype where typecode like '" + u + "' order by typecode";
int r = sqlite3_get_table(db, q.c_str(), &Result, &nrow, &ncol, 0);
for (int j = 1 ; j <= nrow ; j++){ //遍歷搜到的資料串列
UnicodeString w = UTF8String(Result[j]);
Tree->Items->AddChild(Tree->Items->Item[k], w);
}
sqlite3_free_table(Result);
}
簡單的一段代碼就實作了。
代碼的關鍵是,遍歷TreeView時,節點的數量是動態增加的,一直追著遍歷下去,直接節點不再增加(資料庫內容已讀完)時為止。這樣每個節點只遍歷一遍,不存在重復遍歷還要判斷是否需要處理的問題,效率也是比較高的。
uj5u.com熱心網友回復:
先收藏再說。。uj5u.com熱心網友回復:
還沒細看,先收藏。轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/63018.html
標籤:VCL組件使用和開發
下一篇:單鏈表堆疊無法讀取記憶體
