| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Для новичков > Работа с файлом. Ведомость |
| Автор: Beren 13.4.2011, 11:02 | ||
Вот в чём суть. На форме 2 кнопки и таблица строк. Одна кнопка загружает файл и выводит в StringGrid имена и оценки в двух колонках. Это у меня получилось. Теперь надо, чтобы пользователь изменил значение оценки и сохранил в файл. goEditing =true поставил. Вот код. Спасибо.
|
| Автор: amsoft 14.4.2011, 12:08 |
| если вся загвоздка в определении позиции текущей ячейки, то вот эти свойства тебе в помощь: TCustomGrid.Row - индекс строки текущей ячейки TCustomGrid.Col - индекс столбца текущей ячейки Тогда и циклы тебе не нужны будут |
| Автор: Beren 14.4.2011, 20:41 |
| Поконкретней можно ? |
| Автор: Beren 15.4.2011, 10:56 | ||
Не получается (. При нажатии на Button2 появляется ошибка "is not a valid integer value".
|
| Автор: amsoft 15.4.2011, 11:18 |
Это означает, что в данной ячейке нет данных или текст не может быть распознан как число вместо StrToInt попробуй использовать TryStrToInt Добавлено через 2 минуты и 35 секунд TryStrToInt(StringGrid1.Cells[sel1,sel2],Xgroup[i].mark) |
| Автор: Beren 15.4.2011, 12:10 |
| А теперь при нажатии на button2 оценки обнуляютя |
| Автор: amsoft 16.4.2011, 14:25 | ||
|
| Автор: Beren 16.4.2011, 20:16 | ||
Теперь не обнуляется ). Но и не сохраняет изменённую оценку (
|
| Автор: amsoft 17.4.2011, 08:07 | ||
Сразу не узрел ошибку - единицу прибавлять не надо |
| Автор: Beren 17.4.2011, 12:46 | ||
Тогда и условие (sel1>0) and (sel2>0) получается не нужно.... Но всё равно не сохраняет
|
| Автор: amsoft 17.4.2011, 16:44 | ||||
| Вообще не сохраняет или неверно сохраняет? У тебя неверно организован этот цикл. Здесь ты пробегаешь по списку всех учеников и для каждого ученика ставишь одну и ту же оценку (которая стоит в активной ячейке), тогда как оценку надо менять только для отдельного ученика (с индексом равным номеру строки текущей ячейки). ИМХО неудобный вариант. Если у тебя сохранение списка идет по нажатию кнопки, то гораздо лучше обновить сразу весь массив и сохранить его в файл. В этом случае вообще отпадает необходимость поиска активной ячейки, да и без массива Xgroup вполне можно обойтись. Загружаем список в таблицу:
Сохраняем список:
Текстовый файл должен иметь следующий формат: ученик1 оценка1 ученик2 оценка2 ... |
| Автор: Beren 17.4.2011, 18:18 |
| Вообще не сохраняет. Хотелось бы , чтобы вы исправили мой вариант с циклом, а то получится, что вы просто всё за меня сделали. Да, файл такой Иванов 5 Петров 4 Сидоров 3 |
| Автор: amsoft 17.4.2011, 18:31 |
| У меня сохраняет, проверено. Добавлено через 3 минуты и 52 секунды PS Это оптимальный вариант для решения твоей задачи |
| Автор: Beren 17.4.2011, 20:11 |
| Ну всё равно спасибо |
| Автор: Beren 18.4.2011, 15:57 |
| А как сделать чтобы были названия колонок Name и Mark . ТО есть , чтобы таблица выводилась так : Name Mark Сидоров 5 Петров 4 Иванов 3 |
| Автор: amsoft 19.4.2011, 10:02 | ||||||||
| Два варианта: 1. Если шапка таблицы у тебя уже забита заранее, то загружай/сохраняй таблицу не с первой строки, а со второй В коде загрузки исправь
на
В коде сохранения исправь
на
2. Можно шапку таблицы забить в файл со списком учеников, тогда вообще код менять не надо |
| Автор: Beren 19.4.2011, 12:48 |
| Спасибо |