Главная страница
    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.047 c
2-1159346762
Aleks
2006-09-27 12:46
2006.10.15
Как из программы открыть окно проводника с выделенным,нужным файл


15-1158769695
Ringo
2006-09-20 20:28
2006.10.15
XP не видит CDROM


15-1159177256
Тыгыдым
2006-09-25 13:40
2006.10.15
Cached Updates


2-1159354453
mfender
2006-09-27 14:54
2006.10.15
Прелотвращение работы методов в Design Time


3-1155717915
GrBob
2006-08-16 12:45
2006.10.15
FieldName в DBexpress и ADO





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