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

Вниз

Помогите составить обработчик для ListBox   Найти похожие ветки 

 
vodvorezlaya   (2006-09-28 12:08) [0]

Доброго времени суток.

Создал ListBox и заполнил его списком компонентов DataSource:

for i := 0 to Form1.ComponentCount-1 do
begin
  if Components[i] is TDataSource
  then ListBox1.AddItem(Components[i].Name,Components[i]);
end;


Теперь нужно по двойному щелчку на одном из элементов (компонентов DataSource) присвоить его свойству DBGrig.Dataset.

Спасибо.


 
Elen ©   (2006-09-28 12:16) [1]

типа :

procedure TForm1.ListBox1Click(Sender: TObject);
begin
DBGrig.Dataset:= form1.FindComponent(ListBox1.Items[ListBox1.itemindex]);
end;


 
MsGuns ©   (2006-09-28 12:18) [2]

Может, надо "перещелкивать" не датасорсы, а датасеты ?
Это вообще-то говоря совсем не одно и то же


 
clickmaker ©   (2006-09-28 12:18) [3]

procedure TForm1.ListBox1Click(Sender: TObject);
begin
DBGrig.Dataset:= TDataSource(ListBox1.Items.Objects[ListBox1.itemindex]).DataSet;
end;


 
Elen ©   (2006-09-28 12:20) [4]


> clickmaker

Тогда нужно еще в листе связывать object. И это конечно же будет лучше


 
ЮЮ ©   (2006-09-28 12:21) [5]

FindComponent, пожалуй лишнее, объекты и так хранятся в списке.

DBGrig.DataSource := TDataSouce(ListBox1.Items.Objects[ListBox1.itemindex]);


 
vodvorezlaya   (2006-09-28 12:28) [6]

Прошу прощения код немного другой (через AddObject):

for i := 0 to Form1.ComponentCount-1 do
 begin
   if Components[i] is TDataSource
   then ListBox1.Items.AddObject(Components[i].Name,Components[i]);
 end;

Чем вообще AddObject от Add отличается?


> Может, надо "перещелкивать" не датасорсы, а датасеты ?
> Это вообще-то говоря совсем не одно и то же

У меня 12 DataSource, и необходимо чтоб данные в DBGrid менялись по щелчку на ListBox.
А как это сделать, в принципе хорошо два варианта.


> Тогда нужно еще в листе связывать object. И это конечно
> же будет лучше

Теперь как?


 
Palladin ©   (2006-09-28 12:31) [7]

If ListBox1.Items.Objects[ListBox1.ItemIndex] is TDataSource Then DBGrig.DataSource := TDataSource(ListBox1.Items.Objects[ListBox1.ItemIndex]);


> Чем вообще AddObject от Add отличается?

параметрами


 
MsGuns ©   (2006-09-28 12:40) [8]

>vodvorezlaya   (28.09.06 12:28) [6]
>Чем вообще AddObject от Add отличается?

TList,TObjectList + F1 и до посинения

>У меня 12 DataSource, и необходимо чтоб данные в DBGrid менялись по щелчку на ListBox.

Есть полпроцентная вероятность ошибиться, но все же выскажу предположение, что у Вас имеется не 12 "датасорс", а 12 таблиц, содержимое которых надо показывать в единой решетке, причем какую именно показывать должен выбирать пользователь.
Если дело обстоит именно так, то настоятельно рекомендую Вам повнимательнее вникнуть в суть механизма обмена информацией с БД. После чего Вам должны открыться некоторые очевидные вещи. Например, что один "датасорс" вполне может передавать гриду данные сколь угодно многих различных датасетов, в то время как один датасет не может содержать данные нескольких запросов. Или то, что не имеет смысла держать на клиенте 12 (а если завтра надо будет 120 или 1200 ?) открытых наборов данных только для того, чтобы пользователь мог посмотреть любой из них.


 
vodvorezlaya ©   (2006-09-28 12:42) [9]


> Palladin ©   (28.09.06 12:31) [7]

А так можно:

If ListBox1.Items.Objects[ListBox1.ItemIndex] is TDataSource Then DBGrig.DataSource :=ListBox1.Items.Objects[ListBox1.ItemIndex] as TDataSource;

?


 
Palladin ©   (2006-09-28 12:42) [10]


> TList,TObjectList + F1 и до посинения

:) неа, TStrings+F1 до посинения, то он уже читал по мотивам прошлой ветки (надеюсь)


 
Palladin ©   (2006-09-28 12:45) [11]


> vodvorezlaya ©   (28.09.06 12:42) [9]

можно, но не нужно

http://delphimaster.net/view/2-1159423777/


 
vodvorezlaya ©   (2006-09-28 12:49) [12]


> TList,TObjectList + F1 и до посинения

Да я уже красный.


> MsGuns ©   (28.09.06 12:40) [8]

Ты угадал.

Я так понял, создать 12 таблиц к ним 1 датасет, и через свойство DataSource менять источники?

Ты это имел ввиду?

DataSet - это полагаю набор данных, как его получить сразу с 12 таблиц.

Я читал о базах данных, правда книжка не очень.

Спасибо что помогаешь.


 
clickmaker ©   (2006-09-28 12:51) [13]


> Я так понял, создать 12 таблиц к ним 1 датасет, и через
> свойство DataSource менять источники?

что значит "таблиц"? TTable? Так это и есть DataSet
Нужен один DataSource, который жестко привязан к гриду, а у датасоурса уже переключать датасет


 
vodvorezlaya ©   (2006-09-28 13:39) [14]


> Нужен один DataSource, который жестко привязан к гриду,
> а у датасоурса уже переключать датасет

Типа

DataSource1.DataSet := Table1;

?


 
Elen ©   (2006-09-28 13:42) [15]

Удалено модератором


 
Elen ©   (2006-09-28 13:43) [16]

Ой Пардон. У меня Punto балуется :-)))


 
Palladin ©   (2006-09-28 13:54) [17]

а ничего так... экзотично и с намеком получилось...


 
Elen ©   (2006-09-28 14:01) [18]

Удалено модератором


 
MsGuns ©   (2006-09-28 14:03) [19]

>vodvorezlaya ©   (28.09.06 12:49) [12]
>Я так понял, создать 12 таблиц к ним 1 датасет, и через свойство DataSource менять источники?
>Ты это имел ввиду?
>DataSet - это полагаю набор данных, как его получить сразу с 12 таблиц.

Нет, не это. Я имел в виду, что иметь активный (т.е. "открытый" или, как  говорят аксакалы,- "курсор") объект связи с БД (в общем случае наследник TDataSet), который не используется в текущем фрагменте алгоритма (не отображается, не перебирается (сканируется), не упорядочивается и т.д.) не правильно МЕТОДОЛОГИЧЕСКИ. Открывать (КАК открывать - другой вопрос) нужно только те наборы данных, которые нужны для решения текущей задачи.
Применительно к Вашему случаю надо показывать список таблиц текущей БД и, возможно, список полей с характеристиками для активной (в списке) таблицы. Ну и, возможно, содержимое активной таблицы. Хотя последнее окно я бы не советовал обновлять атоматически при смене текущей таблицы в списке таблиц - это может привести к жутким тормозилам и вообще будет сильно раздражать.

Если Вы собираетесь написать некий универсальный интерфейс для просмотра произвольных БД, советую запустить акцесс и посмотреть, как у него реализован интерфейс просмотра таблиц и их содержимого.
В любом случае постоянная  "забота" о "сервере", т.е. о том, как бы поменьше его напрягать, сделает Ваши приложения более гибкими, легкими, шустрыми и в конечном счете более удобными в использовании.


 
vodvorezlaya ©   (2006-09-28 15:52) [20]

Удалено модератором


 
Ketmar ©   (2006-09-28 15:54) [21]

Удалено модератором


 
vodvorezlaya ©   (2006-09-28 16:23) [22]

Удалено модератором


 
Elen ©   (2006-09-28 16:29) [23]

Удалено модератором


 
Ketmar ©   (2006-09-28 16:40) [24]

Удалено модератором


 
Игорь Шевченко ©   (2006-09-28 16:42) [25]

"Просто потрепаться вы можете в соответствующей конференции"



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

Форум: "Начинающим";
Текущий архив: 2006.10.15;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.52 MB
Время: 0.04 c
2-1159190036
Интересующийся
2006-09-25 17:13
2006.10.15
несколько в одном прокручивающемся списке


11-1120242557
Владимир Кладов
2005-07-01 22:29
2006.10.15
Zoomer3


3-1155627561
Death
2006-08-15 11:39
2006.10.15
Создание индексов в THalcyonDataSet


2-1159286314
Merak
2006-09-26 19:58
2006.10.15
Определение текущей позиции потока при использовании IndyTCPser


2-1159158945
Gool
2006-09-25 08:35
2006.10.15
Панель в IE





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский