Консультация № 72060
22.01.2007, 11:51
0.00 руб.
0 2 2
Расскажите пожалуйста, как сохранить и загрузить данные из трёх таблиц StringGrid на одной форме

Обсуждение

Неизвестный
22.01.2007, 12:14
общий
это ответ
Здравствуйте, Tornadosss!
Если не ошибаюсь, то только вручную, стардантными методами (определенным изначально) можно сохранить только отдельные строки либо столбцы.
Когда решал такую же задачу, то взял за основу формат CSV (посохраняй таблицы Excel в этом формате и разберешься - ничего сложного). Плюс такого решения (или минус- это как посмотреть) - возможность редактирования не только в твоей программе но и в Excel, причем без лишних заморочек. Не зачем придумывать ничего нового.
Неизвестный
23.01.2007, 22:21
общий
это ответ
Здравствуйте, Tornadosss!
В приложении реализованы две функции:
StringGridLoadFromFile - загрузка в StringGrid данных из файла;
StringGridSaveToFile - сохранение данных из StringGrid в файл.
Загружается и сохраняется только текстовая информация, другие параметры, такие как размеры ячеек, цвет, шрифт и прочее игнорируются.
Удачи!

Приложение:
//---------------------------------------------------------------------------bool StringGridLoadFromFile(TStringGrid *Grid, AnsiString &filename){ try { int hf = FileOpen(filename, fmOpenRead); if(hf==-1) return false; DWORD size[2]; int read = FileRead(hf, size, sizeof(size)); if(read!=sizeof(size)) { FileClose(hf); return false; } int DataLen = FileSeek(hf,0,2); FileSeek(hf,(int)sizeof(size),0); char *Buf = new char[DataLen+1]; read = FileRead(hf, Buf, DataLen); FileClose(hf); Grid->ColCount = size[0]; Grid->RowCount = size[1]; int k=0; for(int i=0; i<read; ++i,++k) { Grid->Cells[k/(Grid->RowCount)][k%(Grid->RowCount)] = AnsiString(Buf+i); while(Buf[i]!=0) ++i; } delete [] Buf; if(k!=Grid->ColCount*Grid->RowCount) return false; } catch(...) { return false; } return true;}//---------------------------------------------------------------------------bool StringGridSaveToFile(TStringGrid *Grid, AnsiString &filename){ int hf = FileCreate(filename); if(hf==-1) return false; DWORD size[2]; size[0] = Grid->ColCount; size[1] = Grid->RowCount; FileWrite(hf, size, sizeof(size)); for (int I=0; I<Grid->ColCount; I++) for (int J=0; J<Grid->RowCount; J++) FileWrite(hf, Grid->Cells[I][J].c_str(), Grid->Cells[I][J].Length()+1); FileClose(hf); return true;} //---------------------------------------------------------------------------
Форма ответа