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


Автор: Escort 16.6.2008, 09:21
Как обращаться к DBGrid по свойствам Row и Col?

Автор: Palladin 16.6.2008, 09:51
Вроде нельзя smile 
Я обычно так делаю: К примеру у тебя 4 столбца, кидаешь на форму 4 DBEdit-a, ставишь коннект к соответсвующим полям, потом к примеру, тебе нада ко всем значениям ячеек прибавить 1, тогда:
Код

ADOTable1->First;
for(int i=1;i<=ADOTable1->RecordCount;i++)
{
 DBEdit1->Text=IntToStr(StrToInt(DBEdit1->Text)+1);
 DBEdit2->Text=IntToStr(StrToInt(DBEdit2->Text)+1);
 DBEdit3->Text=IntToStr(StrToInt(DBEdit3->Text)+1);
 DBEdit4->Text=IntToStr(StrToInt(DBEdit4->Text)+1);
 ADOTable1->Next;
}

Ну суть ты понял smile

Добавлено через 1 минуту и 20 секунд
Visible=false; дбедитам выстави

Автор: Escort 16.6.2008, 15:03
Слишком не универсально. Но все равно спасибо за ответ. Мне очень понравился этот форум - живой! (в отличие от всех что я повидал)

Автор: Palladin 16.6.2008, 15:20
Есть способ получше, одназначно, подожди может ответит кто из гуруsmile просто когда возникает такая задача, обычно у меня времени не было чтобы хорошо над этим подумать и разобратся, делал так и продолжал писать дальше

Автор: Escort 16.6.2008, 15:30
В инете есть одно решение, но на Delphi. Я даже не знаю смогу ли это адаптировать на С++

Код

unit VUBComps;

interface

uses

  SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,
  Forms, Dialogs, Grids, DBGrids, DB, Menus;

type

  TDBGridVUB = class(TDBGrid)
  private
    { Private declarations }
  protected
    { Protected declarations }
  public
    property Canvas;
    function CellRect(ACol, ARow: Longint): TRect;
    property Col;
    property Row;

    procedure Register;

implementation

procedure Register;
begin

  RegisterComponents('VUBudget', [TDBGridVUB]);
end;

function TDBGridVUB.CellRect(ACol, ARow: Longint): TRect;
begin

  Result := inherited CellRect(ACol, ARow);
end;

end.

Автор: jonie 16.6.2008, 19:05
обращаться надо не к гриду (он только отображает данные), а непосредственно к источнику данных, и менять данные там... если я правильно понял что хочет автор.
т.е. например так:
Код

 DataSource1->DataSet->FindFirst();
 for(int i=0;i<DataSource1->DataSet->RecordCount;++i)
 {
        DataSource1->DataSet->Edit();
        DataSource1->DataSet->Fields->FieldByNumber(2)->Value = i*2; //индекс с 1 (?)
        DataSource1->DataSet->FindNext();
 }
ну и аналогично для чтения...

Автор: Palladin 17.6.2008, 08:54
Ну впринципе этот код тоже не универсален, ибо к примеру 5 столбцов нада, так
Код

 DataSource1->DataSet->FindFirst();
 for(int i=1;i<DataSource1->DataSet->RecordCount;++i)
 {
        DataSource1->DataSet->Edit();
        DataSource1->DataSet->Fields->FieldByNumber(1)->Value = i*2; 
        DataSource1->DataSet->Fields->FieldByNumber(2)->Value = i*2; 
        DataSource1->DataSet->Fields->FieldByNumber(3)->Value = i*2; 
        DataSource1->DataSet->Fields->FieldByNumber(4)->Value = i*2; 
        DataSource1->DataSet->Fields->FieldByNumber(5)->Value = i*2; 
        DataSource1->DataSet->FindNext();
 }

однако думаю его можно сделать и универсальным, к примеру 5 столбцов, тогда:
Код

 DataSource1->DataSet->FindFirst();
 int i;
 for(i=1;i<DataSource1->DataSet->RecordCount;++i)
 {
        DataSource1->DataSet->Edit();
         for(int j=0;j<=5;j++)
        DataSource1->DataSet->Fields->FieldByNumber(j)->Value = i*2; //индекс с 1 (?)
        DataSource1->DataSet->FindNext();
 }

но мот так и нельзя smile 

Автор: Escort 19.6.2008, 11:34
Ну мне нужно это было, чтобы dbGRID распечатать. Ладно, я вроде разобрался. Спасибо.

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