Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2007.02.18;
Скачать: [xml.tar.bz2];

Вниз

Где в TreeView хранить "ключ"?   Найти похожие ветки 

 
click   (2006-11-27 11:17) [0]

При помощи ADO в TreeView загружается из БД пятиуровневое дерево, вот фрагмент загрузки последнего, пятого уровня (Items[5]):
             Query5.Close;
             Query5.Parameters.Clear;
             Query5.Parameters.AddParameter.Value:=Query1.Fields[0].Value;
             Query5.Parameters.AddParameter.Value:=Query2.Fields[0].Value;
             Query5.Parameters.AddParameter.Value:=Query3.Fields[0].Value;
             Query5.Parameters.AddParameter.Value:=Query4.Fields[0].Value;
             Query5.Open;
               while not Query5.Eof do begin
                    if Query5.Fields[1].AsString="" then
                    KlientNode:=TreeView1.Items.AddChild(VidKlientNode, Query5.Fields[0].asString)
               else
                    KlientNode:=TreeView1.Items.AddChild(VidKlientNode, Query5.Fields[1].asString);
                    /////////////// вот здесь
                    Query5.Next;

Здесь все в порядке - дерево загружается правильно.... Вот только одна проблема:
Дело в том что в этот самый пятый уровень (Level) дерева загружаются Ф.И.О. клиентов, которые находятся в таблице klien.dbf поле fio. Когда дерево полностью сформировано то пользователю необходимо предоставить возможность кликом по имени клиента просмотреть о нем доп. сведения (хранящиеся в этойже таблице). Но!  При клике пользователя по фамилии клиента у меня нет никакой информации кроме fio (считанной с TReeView1.Selected.Text), а fio к сожалению поле не уникальное поэтому естественно следующий запрос возвращает мне первого клиента с таким fio и вовсе не обязательно того по которому был произведен клик.. (в случае если таких клиентов несколько)
Вопрос: В участке кода есть комментарий (////////// вот здесь) в этом месте я хотел бы каждой "ветке" TreeView в какое либо свойство, (что-то вроде Tag только с поддержкой string (так как уникальное поле kodklient записано в строковом виде)) записывать уникальный параметр данного клиента (kodklient).
Вообщем необходимо что-то вроде второго (только невидимого) свойства Text у каждой ветки TreeView. Возможно можно использовать Data может еще что нибудь..., вобщем где нибудь в ветке хранить "ключ" клиента не показывая его пользователю. Как?


 
DrPass ©   (2006-11-27 11:20) [1]


> Возможно можно использовать Data может еще что нибудь...
> ,

Не только можно, но и нужно


 
ЮЮ ©   (2006-11-27 11:33) [2]

DrPass ©   (27.11.06 11:20) [1]
Главный вопрос в 4 проследних символах поста :)

TTreeNode.Data: Pointer;

Если "ключ" - integer, то Data хватит для его хранения, а для помещения извлечения использовать приведене типов
xxx.Data = Pointer(Query5.Fields[1].asInteger);
<int> := Integer(xxx.Data)
Если же размера Data не хватит для хранения  "ключа", то выделить память для данных, заполнить их, а в Data запомнить указатель для дальнейшего доступа к той памяти


 
Sam Stone ©   (2006-11-27 12:14) [3]

Зачем изобретать велосипед? Использовать DBTreeView"шные компоненты (DevExpress, EhLib (других не знаю :))) религия не позволяет? Проблем было бы гораздо меньше, да и работать удобнее.


 
click   (2006-11-27 18:37) [4]


> ЮЮ ©   (27.11.06 11:33) [2]
Если "ключ" - integer, то...

Спасибо, но я в вопросе вроде указал что ключевое поле строковое...

Click [0]
> (что-то вроде Tag только с поддержкой string (так как уникальное
> поле kodklient записано в строковом виде))


> Sam Stone ©   (27.11.06 12:14) [3]

Да. Религия не позволяет.... к сожалению
З.Ы.
Уважаемые, если можно, кто нибудь дайте ссылку или пример работы с Data...
Справка не выручает :(


 
clickmaker ©   (2006-11-27 18:52) [5]


> [4] click   (27.11.06 18:37)
>
> > ЮЮ ©   (27.11.06 11:33) [2]
> Если "ключ" - integer, то...
>
> Спасибо, но я в вопросе вроде указал что ключевое поле строковое...

так в [2] же был ответ, что делать, если поле > 4 байт


 
click   (2006-11-28 00:11) [6]


> clickmaker ©   (27.11.06 18:52) [5]
</I
> ЮЮ ©   (27.11.06 11:33) [2]

Ребят, я отлично знаю что на этом сайте не любят когда просят готовый код, также я знаю с каким самозабвением здесь отсылают нажимать F1 до полного просветления, и знаю даже, с каким предвзятым уважением здесь относятся к Google....но, не смотря на все это я не постесняюсь спросить пример (в виде кода) работы с Data в TreeView, ибо справка и гугление так и не довели меня до просветления.... (а такие попытки были приняты неоднократно)
С уважением ко всем откликнувшимся, и с предупреждением об игнорировании ко всем желающим "пинать" (как здесь принято говорить).


 
sniknik ©   (2006-11-28 01:19) [7]

> также я знаю с каким самозабвением здесь отсылают нажимать F1 до полного просветления
и правильно!!!

> ...
забыл кстати, как тут плохо относятся к незарегистрированным...

неужели после поста
ЮЮ ©   (27.11.06 11:33) [2]
> ...
> TTreeNode.Data: Pointer;
трудно было встать в дельфях курсором на приведенное ххх.data и нажать F1, лучше Ctrl F1 чтобы сразу попасть в нужное, а там кликнуть на Example и получить полный пример, с описанием  

The following code defines a record type of TMyRec and a record pointer type of PMyRec.

type
PMyRec = ^TMyRec;
TMyRec = record
 FName: string;
 LName: string;
end;

Assuming these types are used, the following code adds a node to TreeView1 as the last sibling of a specified node. A TMyRec record is associated with the added item. The FName and LName fields are obtained from edit boxes Edit1 and Edit2. The Index parameter is obtained from edit box Edit3. The item is added only if the Index is a valid value.

procedure TForm1.Button1Click(Sender: TObject);

var
 MyRecPtr: PMyRec;
 TreeViewIndex: LongInt;
begin
 New(MyRecPtr);
 MyRecPtr^.FName := Edit1.Text;
 MyRecPtr^.LName := Edit2.Text;
 TreeViewIndex := StrToInt(Edit3.Text);
 with TreeView1 do
 begin
   if Items.Count = 0 then
     Items.AddObject(nil, "Item" + IntToStr(TreeViewIndex), MyRecPtr)
   else if (TreeViewIndex < Items.Count) and (TreeViewIndex >= 0) then

     Items.AddObject(Items[TreeViewIndex], "Item" + IntToStr(TreeViewIndex), MyRecPtr);
 end;
end;

After an item containing a TMyRec record has been added, the following code retrieves the FName and LName values associated with the item and displays the values in a label.

procedure TForm1.Button2Click(Sender: TObject);

begin
 Label1.Caption := PMyRec(TreeView1.Selected.Data)^.FName + " " +
                 PMyRec(TreeView1.Selected.Data)^.LName;
end;


или так и будеш всегда ожидать пока тебе его оттуда скопируют? нда уж....

p.s. мало здесь "пинают", очень мало, надо бы побольше.
p.p.s. можеш конечно игнорировать... но это будет последний раз.


 
click   (2006-11-28 13:05) [8]


> sniknik ©   (28.11.06 01:19) [7]

не буду игорировать так как твой пост всеже содержал ответ...
Спасибо!
Вероятно ни туда я становился курсором... или может еще что, но клянусь - ИСКАЛ! в справке, но этого не нашел...иначе не спрашивал бы (я тут даже на днях выступал ЗА то что бы здесь звучали посты типа "F1" )
Но не нашел я, не нашел.... :(
Спасибо!



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2007.02.18;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.047 c
2-1147795287
Sphinx
2006-05-16 20:01
2007.02.18
Кнопка или панель с переносом строк


15-1169636647
RebroFF
2007-01-24 14:04
2007.02.18
Хочу всё знать!


15-1170058773
dddd
2007-01-29 11:19
2007.02.18
Как по укозателю вернуть сам объект


3-1163222191
Sansy
2006-11-11 08:16
2007.02.18
драйвер для BDE


15-1169821131
Vlad Oshin
2007-01-26 17:18
2007.02.18
Кстати, мою анкету кто-нибудь видит?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский