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


Автор: _Nick_ 10.3.2007, 14:55
Есть вот такой вот код:
Код

procedure TForm1.Button1Click(Sender: TObject);
var number: integer;
    kol_parts:integer;
    Value:integer;
    ii: integer;
    Valuee:Tstringfield;
begin
  number:=StrToInt(Edit1.Text);  // число
  kol_parts:=StrToInt(Edit2.Text); // количество частей
  ClientDataSet1:=TClientDataSet.Create(Application);
  Valuee:=TStringField.Create(Application);
  Valuee.FieldName:='Valuee';
  Valuee.Size:=30;
  Valuee.DataSet:=ClientDataSet1;
  ClientDataSet1.CreateDataSet;
  ClientDataSet1.LogChanges:=false;
  value:=number div kol_parts;  // значение для записи
  ShowMessage(IntToStr(value));
  DBGrid1.Columns.Clear;
  for  ii:=1 to kol_parts do
  begin
    ClientDataSet1.Append;
    ClientDataSet1.FieldByName('Valuee').AsInteger:=value;
    ClientDataSet1.Next;
  end;
  DataSource1:=TDataSource.Create(Application);
  DataSource1.DataSet:=ClientDataSet1;
  DBGrid1.DataSource:=DataSource1;
end;

он разделяет введеное число на указанное количество равных частей и выводит это в строки DBGrid в 1 колонку
пример 
введено 1000
кол-во частей 2
выводит в 2 строки по 500 в каждой
Мне надо, что б этот код генерировал 2 колонки  и в одну как и было выводил разделенное число, а во вторую выводил дату(день.месяц.год) причем месяц на следующей строчке увеличивался бы на 1, а по достижению 12 увеличивался бы и год на 1 (день вводиться пользователем)
например

    дата          разделенное число
12.01.2007          500
12.02.2007          500
...                         ...
Помогите такое реализовать

Автор: remax 11.3.2007, 13:44
И в чем проблема?
1) В секции var обьявляешь еще одну переменную типа Tstringfield, например -Value2.
2) Создаешь ее.
3) В цикле, заполняешь обе переменные своими значениями. (Не забывашь использовать DateToStr и IntToStr)
И все...

 smile  smile 

Автор: _Nick_ 12.3.2007, 21:45
Вот похимичил с кодом, у меня не получаеться сделать так что когда количество месяцев превысит 12 увеличивался бы и год

вот мой подправленный код
Код

procedure TForm1.rasClick(Sender: TObject);
var number: integer;
    kol_parts:integer;
    Value:integer;
    mes:integer;
    ii: integer;
     i: integer;
    Valuee:Tstringfield;
    DDD:Tstringfield;
    Year, Month, Day, Hour, Min, Sec, MSec: Word;
    Present: TDateTime;
    ye:integer;
begin

  number:=StrToInt(DBEdit3.Text);  // число
  kol_parts:=StrToInt(DBEdit4.Text); // количество частей
  ClientDataSet1:=TClientDataSet.Create(Application);
  Valuee:=TStringField.Create(Application);
  DDD:=TStringField.Create(Application);
  Valuee.FieldName:='Первая колонка';
  DDD.FieldName:='Вторая колонка';
  Valuee.Size:=10;
  DDD.Size:=15;
  Valuee.DataSet:=ClientDataSet1;
  DDD.DataSet:=ClientDataSet1;
  ClientDataSet1.CreateDataSet;
  ClientDataSet1.LogChanges:=false;
    Present:= Now;
    DecodeDate(Present, Year, Month, Day);

  value:=number div kol_parts;  // значение для записи
   mes:=(Month);
   ye:=(Year);
  DBGrid2.Columns.Clear;
  for  ii:=1 to kol_parts do
  begin
    ClientDataSet1.Append;
    ClientDataSet1.FieldByName('Первая колонка').AsInteger:=value;
    ClientDataSet1.FieldByName('Вторая колонка').AsInteger:=ye;
    mes:=mes+1;
  end;
//   if mes>12 then
//   ye:=(year)+1;
//    begin
 //    ClientDataSet1.Append;
 //    ClientDataSet1.FieldByName('Первая клонка').AsInteger:=value;
 //    ClientDataSet1.FieldByName('Вторая колонка').AsInteger:=ye;
 // end;

  DataSource2:=TDataSource.Create(Application);
  DataSource2.DataSet:=ClientDataSet1;
  DBGrid2.DataSource:=DataSource2;
  end;

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