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

Вниз

Почему не получается переопределить свойство DataSource у потомка   Найти похожие ветки 

 
Michael5   (2005-08-15 08:59) [0]

DBGrid? Пишет ошибку - неизвестный идентификатор... А вроде все делаю правильно. Подскажите пожалуйста!


unit MyGrid;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, DBGrids, DB, ADODB, StdCtrls;

type
 TMyDatabaseGrid = class (TDBGrid)
 private
   FADOConnection: TADOConnection;
   FADOTable: TADOTable;
   FConnectionString: WideString;
   FDataSource: TDataSource;
   FLabel: TLabel;
   function GetConnectionString: WideString;
   procedure SetConnectionString(Value: WideString);
 public
   constructor Create(AOwner:TComponent); override;
   property DataSource;//вот что здесь неправильно???
 published
   property ConnectionString: WideString read GetConnectionString write
           SetConnectionString;
 end;
 

procedure Register;

implementation

procedure Register;
begin
 RegisterComponents("MyGrid", [TMyDatabaseGrid]);
end;

{
******************************* TMyDatabaseGrid ********************************
}
constructor TMyDatabaseGrid.Create(AOwner:TComponent);
begin
       inherited Create(AOwner);
       FLabel:=TLabel.Create(Self);
       FLabel.Caption:="MyDBGrid";
       FLabel.Top:=2;
       FLabel.Left:=20;
       FLabel.Parent:=Self;
       FLabel.Visible:=false;
       //******************************************
       
       FADOConnection:=TADOConnection.Create(Self);
       FADOTable:=TADOTable.Create(Self);
       FDataSource:=TDataSource.Create(Self);
       FADOTable.Connection:=FADOConnection;
       FDataSource.DataSet:=FADOTable;
       
      TMyDatabaseGrid.DataSource:=FDataSource;//на эту строку и ругается!
end;

function TMyDatabaseGrid.GetConnectionString: WideString;
begin
end;

procedure TMyDatabaseGrid.SetConnectionString(Value: WideString);
begin
   if ConnectionString <> Value then
   begin
 //    MyADOConnection.CheckInactive;
     FADOConnection.ConnectionString := Value;
     ConnectionString := Value;
     FConnectionString := Value;
   end;
end;

end.


 
Anatoly Podgoretsky ©   (2005-08-15 09:13) [1]

Это приватное поле.


 
Michael5   (2005-08-15 11:19) [2]

Почему приватное?
 TDBGrid = class(TCustomDBGrid)
 public
   property Canvas;
   property SelectedRows;
 published
   property Align;
   property Anchors;
   property BiDiMode;
   property BorderStyle;
   property Color;
   property Columns stored False; //StoreColumns;
   property Constraints;
   property Ctl3D;
   property DataSource;
...


 
Reindeer Moss Eater ©   (2005-08-15 14:14) [3]

TMyDatabaseGrid.DataSource:=FDataSource;//на эту строку и ругается!

Правильно делает что ругается.
Полям экземпляра надо присваивать значения, а не полям класса


 
tesseract ©   (2005-08-15 14:38) [4]

поле объявлено как published, public  лучше не объявлять, если и получится то скорей всего будет сбоить.
>>TMyDatabaseGrid.DataSource:=FDataSource;

Свойству нельзя так присваивать. Ему присвоены  методы OnDataSourceRead и OnDataSourceWrite которые непосредственно и отвечают за чтение и запись. И скорее всего в тот же FDataSource.

Moss Eater тоже прав, писать нужно так DataSource:=FDataSource - но зачем ???? Ведь FDataSource и есть поле где хранится DAtaSource.


 
Наиль ©   (2005-08-15 22:18) [5]

Где-то прочитал, что published-свойство, можно и иногда нужно делать public.
Эта возможность предусмотрена Borland"ом для скрытия свойств из Инспектора объектов.
А что касается ошибочной строчки, то всё очень просто.
Убери из декларации FDataSource. Всё равно DataSource будет использовать переменую описаную в предке.
Убери из декларации property DataSource, если хочешь оставить оставить свойсво в инспекторе.
А строчки
FDataSource.DataSet:=FADOTable;
TMyDatabaseGrid.DataSource:=FDataSource

замени на
DataSource.DataSet:=FADOTable
И тогда будет тебе Счастье.


 
Юрий Зотов ©   (2005-08-16 00:05) [6]

> Наиль ©   (15.08.05 22:18) [5]

> Где-то прочитал, что published-свойство, можно и иногда нужно
> делать public.

Можно. Но не нужно. Потому что это все равно ничего не даст.

> Эта возможность предусмотрена Borland"ом для скрытия свойств
> из Инспектора объектов.

Не верьте. Лучше проверьте. Не предусмотрено такое Borland"ом.

> Michael5   (15.08.05 08:59)

Если хотите спрятать DataSource, то наследуйтесь от TDCustomBGrid и публикуйте только те свойства, которые нужны (по образцу TDBGrid).


 
Наиль ©   (2005-08-16 16:30) [7]

Спасибо Юрий, что разъяснили про published->public. Этим методом для скрытия не пользовался, поэтому не был уверен, что прав.


 
Юрий Зотов ©   (2005-08-16 18:22) [8]

> Наиль ©   (16.08.05 16:30) [7]

Свойство можно убрать из ИО, если зарегистрировать для него "пустой" редактор (то есть, при вызове RegisterPropertyEditor указать nil вместо класса редактора).

Но спрячется оно только для ИО, а для кода все равно останется доступным. В Delphi нет способа понизить видимость членов класса в классе-потомке.

P.S.
Если в книжке написано обратное, то возникают очень серьезные сомнения в компетентности ее автора.


 
Наиль ©   (2005-08-16 22:57) [9]

> [8]

> Свойство можно убрать из ИО, если зарегистрировать для него
> "пустой" редактор (то есть, при вызове RegisterPropertyEditor
> указать nil вместо класса редактора).


Не смотря на то, что этот совет Вы не однократно дайте в течении многих лет. Я им так и не воспользовался. Мне проще было переопределить свойство как ReadOnly.


 
Наиль ©   (2005-08-17 00:11) [10]

Я поискал тот совет, на который опирался сам.
http://lib.profi.net.ua/doc/info_sites/visprog/books/delphi5books/2/DT/HIDEPROP.HTM
Там не совсем то, что я посоветовал. Поэтому проверил, соответсвует ли этот совет действительности. Вывод был не утешительный: не соответсвует.


 
Юрий Зотов ©   (2005-08-17 07:06) [11]

> Наиль ©   (17.08.05 00:11) [10]

Заглянул по ссылке. Потрясающе. Я буквально в шоке.

Ведь об этом писал еще Конопка, еще про Delphi 1, еще лет 7 тому назад (а Конопке стоит верить, он зря не говорит, вот чесс-слово). И это - азбука Дельфишной модели ООП. Более того, это же элементарно проверяется. И, тем не менее, даются вот такие "советы".

Потрясающе. Я буквально в шоке.

Млин, как же много "компонент райтеров" и как же мало разработчиков компонентов.



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

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

Наверх




Память: 0.48 MB
Время: 0.012 c
2-1137704746
STK
2006-01-20 00:05
2006.02.05
Работа с расшаренной папкой в сети, поиск


2-1137503230
Ольга
2006-01-17 16:07
2006.02.05
Высота ToolButtons в ToolBar


2-1137864246
asd
2006-01-21 20:24
2006.02.05
Отчётность


1-1136283831
sergg
2006-01-03 13:23
2006.02.05
Запрет редактирования элементов Items в Combobox


1-1135900399
Gorger
2005-12-30 02:53
2006.02.05
Существует ли к Дельфи 6 библиотека для формирования PDF?





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