Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Базы данных и репортинг > создание компонента DBGrid в коде программы


Автор: misskio 31.10.2006, 10:58
здравствуйте

создаю компонент Query
создаю табличку и заполняю ее данными:

Код

 Query.SQL.Add('if (select object_id(''tempdb..#tmp_cf_fund'',''u'')) is not null drop table #tmp_cf_fund');
  Query.SQL.Add('create table #tmp_cf_fund(');
  Query.SQL.Add('sid varchar(30),');
  Query.SQL.Add('state_sid varchar(30),');
  Query.SQL.Add('type_sid varchar(30),');
  Query.SQL.Add('item_name varchar(255),');
  Query.SQL.Add('item_remark varchar(255),');
  Query.SQL.Add('state_name varchar(50),');
  Query.SQL.Add('type_name varchar(50),');
  Query.SQL.Add('partner_code varchar(50),');
  Query.SQL.Add('partner_name varchar(255),');
  Query.SQL.Add('partner_short_name varchar(255),');
  Query.SQL.Add('bselect bit)');

  Query.SQL.Add('insert into #tmp_cf_fund(sid, state_sid, type_sid, item_name, item_remark, state_name, type_name, partner_code, partner_name, partner_short_name)');
  Query.SQL.Add('execute dbo.ap_11535000000029348');
  Query.SQL.Add('update #tmp_cf_fund set bselect = 0');

  Query.SQL.Add('select * from #tmp_cf_fund');


теперь мне надо динамически создать объект DBGridEh с использованием лишь двух полей:
элементами  DBGridEh  являются чекбоксы с caption по полю partner_short_name,
а признаком того, что некий чексбох выбран будет то, что значение bselect = 1
если же значение bselect = 0, то чексбокс неактивен

Подскажите, пожалуйста, как это сделать

Автор: superVad 31.10.2006, 11:46
а почему именно динамически?
может создать зарание и сделать невидимым, а потом когда надо видимым?

Автор: Akella 31.10.2006, 11:48
Цитата(misskio @  31.10.2006,  10:58 Найти цитируемый пост)
создаю компонент Query

а где код создания Query?

Автор: misskio 31.10.2006, 11:51
Цитата(superVad @  31.10.2006,  11:46 Найти цитируемый пост)
а почему именно динамически?
может создать зарание и сделать невидимым, а потом когда надо видимым? 


у меня сама форма создается динамически

Добавлено @ 11:53 
Цитата(Akella @  31.10.2006,  11:48 Найти цитируемый пост)
а где код создания Query? 


Код

Query := TADOQuery.Create(nil);
Query.ConnectionString :=Config.GetAladdinDBConnStr;
Query.SQL.Clear;


Автор: superVad 31.10.2006, 12:17
создаеш грид

потом чтото типа:

DBGridEh1.Columns[0] := TColumnEh.Create(не знаю что здесь - почитай в хелпе);

и потом по хелпу - присвоить DBGridEh1.Columns[0].Checkboxes true и в KeyList:
DBGridEh1.Columns[0].KeyList.Strings[0] := '1';
DBGridEh1.Columns[0].KeyList.Strings[1] := '0';


Цитата

property  Checkboxes: Boolean;

Description
Checkboxes automativcaly true for boolean field. To show checkboxes for non boolean fields fill first line of KeyList that corresponds to the checked state of the checkbox, second line -  non checked state, and set Checkboxes to True. Line of KeyList can represent more than one value in a semicolon-delimited list of items.

DBGridEh1.Columns[1].KeyList.Strings[0] := 'True;Yes;On';

DBGridEh1.Columns[1].KeyList.Strings[1] := 'False;No;Off';

For boolean field not need to fill keyList.

EhLib Software


я примерно написал  smile 

Автор: Akella 31.10.2006, 12:28
Код

//Что-то вроде  этого
....
  private
    { Private declarations }

   Grid:TDBGridEh;
...

procedure TForm1.Button1Click(Sender: TObject);
Var
ds:TDataSource;
begin
  ds := TDataSource.Create(Form1);
  ds.DataSet := Query1;

  Grid := TDBGridEh.Create(Form1);
  Grid.Parent := Form1;
  Grid.Align := alTop;
  Grid.Flat := true;
  Grid.Visible := true;
  Grid.DataSource := ds;


  with Grid.Columns.Add do begin
    FieldName := Query1.Fields[0].FieldName;
    Title.Caption := 'Заголовок1';
    Checkboxes := true;
    KeyList.Add('1;T;Y;');
    KeyList.Add('0;F;N;');
  end;

  with Grid.Columns.Add do begin
    FieldName := Query1.Fields[1].FieldName;
    Title.Caption := 'Заголовок2';
  end;

  Query1.Close;
  Query1.Open;
//  Grid.Columns.RebuildColumns;
end;



procedure TForm1.Button2Click(Sender: TObject);
begin
  FreeAndNil(Grid);
end;

Автор: misskio 31.10.2006, 14:14
спасибо superVad
все правильно написал

только:

Цитата(superVad @  31.10.2006,  12:17 Найти цитируемый пост)
For boolean field not need to fill keyList


это же означает, что для булевых значений не надо определять?

Добавлено @ 14:22 
спасибо

Цитата(Akella @  31.10.2006,  12:28 Найти цитируемый пост)
  Query1.Close;
  Query1.Open;


зачем закрывать, а потом открывать?

Автор: Akella 31.10.2006, 14:44
я тебе дал готовый  и рабочий код создания грида в Run Time, просто это я переоткрие запрса сделал, чтобы наверняка

Автор: misskio 31.10.2006, 15:07
Цитата(Akella @  31.10.2006,  14:44 Найти цитируемый пост)
я переоткрие запрса сделал, чтобы наверняка 


понятно...

спасибо

Добавлено @ 15:07 
всем спасибо

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)