線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1316
推到 Plurk!
推到 Facebook!

關於TreeView對Table的連結

尚未結案
kenton
一般會員


發表:24
回覆:21
積分:9
註冊:2005-05-13

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-11-19 14:53:14 IP:61.216.xxx.xxx 未訂閱
我想問要的問題是 有關TreeView對Table的連結 附上圖 我Form2的Treeview是輔助我現在寫程式用的 我主要顯示Table里的資料是用Form1的TreeView 我想要Form一打開 TreeView就會自己去Table找Title的資料 然後顯示在TreeView裡~用Kind來進行分類 自行歸納至那四的節點裡 TreeView有辦法做到這樣嗎?! 還是我用的方法有誤 一直做不出來 我之前是把它寫在Form2的確定鈕裡 後來發現 我把程式關掉以後 就沒有辦法在顯示出了 而且~也沒有辦法讀到Table1裡的Title的資料 顯示出也是顯示出空的 那個sss是我指定給他的 TTreeNode* node = TreeView1->Items->Item[0]; TreeView1->Items->AddChild(node,"sss"); 所以也不知道怎麼做 思緒很亂 麻煩大大幫我解決一下 感激不盡^^
RedSnow
版主


發表:79
回覆:1322
積分:845
註冊:2003-12-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-11-20 00:21:59 IP:59.115.xxx.xxx 未訂閱
kenton 妳好:    方便的話請將妳原先寫在 Form2 "確定" 鈕裡 "新增資料到資料庫" 的那一段敘述貼上來,或是將妳的程式打包上傳至 "會員求助程式檔案上傳區",這樣子比較容易找出問題來。 7 天天敲鍵盤 v 時時按滑鼠 8
kenton
一般會員


發表:24
回覆:21
積分:9
註冊:2005-05-13

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-11-20 16:24:48 IP:163.21.xxx.xxx 未訂閱
http://student.sjsmit.edu.tw/~90107028/home_test.rar 我的檔案 http://student.sjsmit.edu.tw/~90107028/WorkDir.rar 我的資料庫
RedSnow
版主


發表:79
回覆:1322
積分:845
註冊:2003-12-15

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-11-20 21:23:52 IP:61.230.xxx.xxx 未訂閱
kenton 妳好:    我測試過妳的程式之後,將它做了些修改,同時僅可能的加上註解,希望妳能看懂 (在妳修改程式之前,建議妳先將目前的專案做個備份,以備不時之需),程式中的可視元件也有做些修改如下,這個部份需要妳以手動方式先設定好:
  1. 妳原先放在 Form2 "確定" 按鈕的 OnClick 事件中,有做新增一筆空記錄資料的動作,這個動作放在該處並不合適,因此我在 Form2 另外增加一個名為 BitBtn5 的按鈕,Caption 設為 "新增",妳原先放在 "確定" 按鈕 OnClick 事件中的 "新增一筆空記錄資料" 的動作移到這裡來處理。
  2. Form2 "離開" 按鈕的 Kind 屬性改為 bkCustom,以便在其 OnClick 事件中做一些處理。
其它有修改的部份就是程式碼了,我將 Unit1.cpp 與 Unit2.cpp 的內容貼上來,妳自己比對看看好了:
***** Unit1.cpp *****
#include 
#pragma hdrstop    #include "Unit1.h"
#include "Unit2.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------    void __fastcall TForm1::Button1Click(TObject *Sender)
{
    Form2->Show();
}
//---------------------------------------------------------------------------    void __fastcall TForm1::FormShow(TObject *Sender)
{
    Form2->Table1->Open();
    Form2->FillTree(TreeView1);  // 產生 Form1 的 TreeView 節點資料
    Form2->Table1->Close();
}    ***** Unit2.cpp *****
#include 
#pragma hdrstop    #include "Unit2.h"
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm2 *Form2;
//---------------------------------------------------------------------------    __fastcall TForm2::TForm2(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------    void __fastcall TForm2::BitBtn1Click(TObject *Sender)
{
    FillTree(Form1->TreeView1);  // 重新產生 Form1 的 TreeView 節點
    FillTree(TreeView1);  // 重新產生 Form2 的 TreeView 節點
}
//---------------------------------------------------------------------------    void __fastcall TForm2::BitBtn2Click(TObject *Sender)
{
    Table1->Delete();
}
//---------------------------------------------------------------------------    void __fastcall TForm2::BitBtn3Click(TObject *Sender)
{
    DBEdit1->Clear();
    DBEdit2->Clear();
    DBEdit3->Clear();
    DBEdit4->Clear();
}
//---------------------------------------------------------------------------    void __fastcall TForm2::BitBtn4Click(TObject *Sender)
{
    // 離開前將空的記錄刪除掉
    Table1->First();
    while (!Table1->Eof) {
        if (Table1Kind->Value == "") {  // 如果 Kind 欄位是空的
            Table1->Delete();  // 刪除這一筆記錄
        }
        Table1->Next();
    }        Table1->Close();
    Close();
}
//---------------------------------------------------------------------------    void __fastcall TForm2::BitBtn5Click(TObject *Sender)
{
    Table1->Append();
    Table1No->Value = "";
    Table1Title->Value = "";
    Table1Note->Value = "";
    Table1Kind->Value = "";
    Table1->Post();        DBEdit1->SetFocus();  // 將游標移到 No 欄位去,以方便後續的操作
}
//---------------------------------------------------------------------------    void __fastcall TForm2::FormShow(TObject *Sender)
{
    Table1->Open();
    FillTree(TreeView1);  // 產生 Form2 的 TreeView 節點
}
//---------------------------------------------------------------------------
// 以 Index 來取得 Node 的自定函式
TTreeNode* __fastcall TForm2::GetTreeViewNodeFromIndex(TTreeView *tv, int Index)
{
    TTreeNode* node = tv->Items->GetFirstNode();        int I = Index;
    while (I != 0 && node != NULL) {
        node = node->getNextSibling();
        I--;
    }
    return node;
}
//---------------------------------------------------------------------------
// 產生指定 TreeView 的各個節點資料
void __fastcall TForm2::FillTree(TTreeView *tv)
{
    TTreeNode* node;
    int Kind;        tv->Items->Clear();
    tv->Items->Add(NULL, "非常重要");
    tv->Items->Add(NULL, "很重要");
    tv->Items->Add(NULL, "普通");
    tv->Items->Add(NULL, "還好");        Table1->First();
    while (!Table1->Eof) {
        if (Table1Kind->Value != "") {  // 如果 Kind 欄位不是空的
            Kind = StrToInt(Table1Kind->Value);
            node = GetTreeViewNodeFromIndex(tv, Kind - 1);  // 找到對應於 Kind 的主節點
            tv->Items->AddChild(node, Table1Title->Value);  // 建立子節點
        }
        Table1->Next();
    }
}
程式並未做最佳化考量,妳可以在瞭解我修改的部份之後,設法加強一下。 7 天天敲鍵盤 v 時時按滑鼠 8 發表人 - RedSnow 於 2005/11/20 21:26:56
kenton
一般會員


發表:24
回覆:21
積分:9
註冊:2005-05-13

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-11-21 15:39:30 IP:163.21.xxx.xxx 未訂閱
[C Error] Unit1.cpp(36): E2316 'FillTree' is not a member of 'TForm2' 是Unit2.h的檔案還要宣告嗎?! 我有點不了解 可以在麻煩妳幫我解答一下嗎?! 拜託 我知道GetTreeViewNodeFromIndex這個是要在Unit2.h的private裡宣告 可是FillTree我就有點搞不懂 可以麻煩了解的人幫我說明一下嗎?! 感謝萬分
RedSnow
版主


發表:79
回覆:1322
積分:845
註冊:2003-12-15

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-11-21 16:20:26 IP:59.115.xxx.xxx 未訂閱
kenton 妳好:    很抱歉漏貼了 Unit2.h 宣告的部份,現在補貼上來:
private:
    TTreeNode* __fastcall GetTreeViewNodeFromIndex(TTreeView *tv, int Index);
public:
    __fastcall TForm2(TComponent* Owner);
    void __fastcall FillTree(TTreeView *tv);
7 天天敲鍵盤 v 時時按滑鼠 8
kenton
一般會員


發表:24
回覆:21
積分:9
註冊:2005-05-13

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-11-22 00:18:12 IP:163.21.xxx.xxx 未訂閱
void __fastcall FillTree(TTreeView *tv); 原來是這樣寫的 我一直打錯 真的是太謝謝RedSnow的幫忙了 謝謝~
系統時間:2024-04-29 22:55:17
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!