Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.03.2012, 20:37   #1
Максим_83
Пользователь
 
Регистрация: 09.02.2012
Сообщений: 39
По умолчанию Несколько StringGrid скопировать в один (Delphi)

Приветствую всех. Нужна помощь в создании процедуры которая скопирует несколько StringGrid в один.
У меня на форме есть 6 StringGrid, 1 Видимый и остальные спрятаны до момента их вызова.
В 5 из них я подгружаю информацию из Excel, далее мне надо из этих 5-и всю информацию скопировать в первый StringGrid.
Вот нашёл процедуру которая объеденяет из нескольких StringGrid в один и потом можно сохранить в Excel
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  MaxColCnt, i, Last: Integer;
  SumGrid: TStringGrid;
begin
  SumGrid := TStringGrid.Create(Self);
  try
    // определяем число столбцов и строк в суммарном StringGrid
    MaxColCnt := StringGrid1.ColCount;
    if StringGrid2.ColCount > MaxColCnt then MaxColCnt := StringGrid2.ColCount;
    if StringGrid3.ColCount > MaxColCnt then MaxColCnt := StringGrid3.ColCount;
    SumGrid.ColCount := MaxColCnt;
    SumGrid.RowCount := StringGrid1.RowCount + StringGrid2.RowCount + StringGrid3.RowCount;
 
   // копируем содержимое первого StringGrid
    Last := 0;
    for i := 0 to StringGrid1.RowCount - 1 do
      SumGrid.Rows[i].Assign(StringGrid1.Rows[i]);
    // копируем содержимое второго StringGrid
    Inc(Last, StringGrid1.RowCount);
    for i := 0 to StringGrid2.RowCount - 1 do
      SumGrid.Rows[i + Last].Assign(StringGrid2.Rows[i]);
    // копируем содержимое третьего StringGrid
    Inc(Last, StringGrid2.RowCount);
    for i := 0 to StringGrid3.RowCount - 1 do
      SumGrid.Rows[i + Last].Assign(StringGrid3.Rows[i]);
//Сохранение в Excel
    if SaveAsExcelFile(SumGrid, 'My Stringgrid1','e:\MyExcelFile.xls') then
      ShowMessage('StringGrid saved!');
  finally
    SumGrid.Free;
  end;
end;
Я вижу что эта процедура копирует содержимое в массив SumGrid, но как из него вставить эту информацию в StringGrid обойдя цикл сохранения в Excel и последующей загрузки из Excel в нужный мне StringGrid.

Последний раз редактировалось Максим_83; 01.03.2012 в 20:44.
Максим_83 вне форума Ответить с цитированием
Старый 02.03.2012, 10:49   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

совсем непонятно, ЧТО ЖЕ Вам нужно сделать/получить.

ну, допустим, есть один стрингрид 2x5 (две строчки, пять столбцов) первый столбец текстовый, второй - дата, остальные - числовые.
второй стрингрид 3x3 - полностью числовой
и третий стрингрид 4X4 - полностью текстовый.
(для простоты ограничемся тремя стрингридами..)

вопрос. если нужно объединить эти три стрингрида в один, то какого размера и как будет выглядеть этот самый объединённый стрингрид?!!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 02.03.2012, 18:27   #3
Максим_83
Пользователь
 
Регистрация: 09.02.2012
Сообщений: 39
По умолчанию

У меня StringGrid как окрытый так и скрытые имеют одинаковое число столбцов(11 столбцов), число строк разное. Получается при слиянии нескольких в один все данные копируются в первый без смещения ячеек в сторону.
В данном мною примере ясно видно что данные из трёх StringGrid объеденяются и сохраняются в Excel как одна книга.
Вот мне и нужна функция которая сделает копирование данных в StringGrid1 из других.
Как SumGrid можно выдернуть чтобы вставить в StringGrid1?

Последний раз редактировалось Максим_83; 02.03.2012 в 18:52.
Максим_83 вне форума Ответить с цитированием
Старый 02.03.2012, 21:03   #4
Black_Shem
Пользователь
 
Аватар для Black_Shem
 
Регистрация: 29.12.2011
Сообщений: 27
По умолчанию

Ну так SumGrid,имеет тот же класс,что и StringGrid1,в чем проблема то?
Скопируй нужные строки,столбцы.
Код:
StringGrid1.Cells[1,1]:=sumGrid.Cells[1,1];
Вот код для переноса данных
Код:
// Очищаем StringGrid1
for i:=1 to StringGrid1.RowCount-1 do
 StringGrid1.Rows[i].Clear;
//Устанавливаем количество строк и столбцов
stringGrid1.RowCount:=sumGrid.RowCount;
stringGrid1.ColCount:=sumGrid.ColCount;
// Переносим все данные в StringGrid1
for i:=1 to sumGrid.RowCount-1 do
 for j:=0 to sumGrid.ColCount-1 do
 stringGrid1.Cells[j,i]:=sumGrid.Cells[j,i];
Лень-двигатель прогресса...

Последний раз редактировалось Black_Shem; 02.03.2012 в 21:25.
Black_Shem вне форума Ответить с цитированием
Старый 02.03.2012, 23:47   #5
Максим_83
Пользователь
 
Регистрация: 09.02.2012
Сообщений: 39
По умолчанию

Спасибо за помощь. Я в дельфях не особо силён. А со StringGrid около месяца как начал знакомиться... Так что прошу сильно не пинать.
Максим_83 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Несколько RichEdit'ов в один apromix Компоненты Delphi 9 12.04.2019 10:41
Несколько insert into в один. MrBobyara SQL, базы данных 2 07.02.2011 18:31
Несколько форм на один Unit (Delphi) ChEaTeR-abc Помощь студентам 7 14.07.2010 23:20
Склеит несколько массивов в один Darunok Microsoft Office Excel 7 22.06.2010 20:35
*.txt несколько в один-результирующий. Koleso Общие вопросы Delphi 6 08.03.2009 23:55