Поиск:

Ответ в темуСоздание новой темы Создание опроса
> проблема с Grid, не узнает свойство 
V
    Опции темы
Artiom
Дата 8.6.2006, 12:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1031
Регистрация: 11.3.2003
Где: Минск\Баку

Репутация: 3
Всего: 17



создал Grid 
Код

frmClForm = CREATEOBJECT('Form')  && Create a Form
frmClForm.Closable   = .T.  && Disable the Control menu box 
frmClForm.MaxButton  = .F.
frmClForm.MinButton  = .F.
frmClForm.Autocenter = .T.
frmClForm.top = 20
frmClForm.Caption  = "Список"
frmClForm.Height   = _SCREEN.height - 80
frmClForm.Width    = 400
frmClForm.AddObject('grdGrid1','Grid')  && Add Grid control

frmClForm.grdGrid1.Width    = 400
frmClForm.grdGrid1.Height = _SCREEN.height - 80
frmClForm.grdGrid1.ReadOnly = .T.
frmClForm.grdGrid1.Visible    =.T.  && Grid control visible
frmClForm.grdGrid1.DeleteMark =.F. 
frmClForm.grdGrid1.RowHeight   = nRowHeight
frmClForm.grdGrid1.FontName   = 'Courier New Cyr'
frmClForm.grdGrid1.FontSize   = 9
frmClForm.grdGrid1.FontItalic = .T.

frmClForm.grdGrid1.Column1.Header1.Caption  = "Колонка1"
frmClForm.grdGrid1.Column2.Header1.Caption  = 'Колонка2"
frmClForm.grdGrid1.Column1.Width = 50
frmClForm.grdGrid1.Column2.Width = 350
frmClForm.grdGrid1.ColumnCount = 2

frmClForm.grdGrid1.SetAll("DynamicForeColor","IIF(pr_mode = 0,RGB(0,0,0),RGB(255,0,0))","Column")
frmClForm.WindowState = 0
frmClForm.WindowType= 1

Ругается на строки 
Код

frmClForm.grdGrid1.Column1.Header1.Caption  = "Колонка1"
frmClForm.grdGrid1.Column2.Header1.Caption  = 'Колонка2"
frmClForm.grdGrid1.Column1.Width = 50
frmClForm.grdGrid1.Column2.Width = 350

говорит "Unknown member COLUMN1"
что-то не пойму - во всех примерах к колонкам обращаются именно так. пробовал написать Column(1).Width - тоже не сработало 


--------------------
Если тебя жизнь трахает, значит, ты ещё живой
PM MAIL ICQ   Вверх
Artiom
Дата 8.6.2006, 14:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1031
Регистрация: 11.3.2003
Где: Минск\Баку

Репутация: 3
Всего: 17



И еще сразу вопрос про грид.
пытаюсь отобразить в нем таблицу  
Код

USE CLIENTS
    SELECT cl_num,cl_name FROM clients INTO CURSOR tmpcur NOFILTER 
    COUNT TO nRowCount
USE    
IF nRowCount = 0 then
    MESSAGEBOX("No records")
    return(-1)
ENDIF
DO FORM cl_form 
cl_form.grid1.recordsourcetype = 1
cl_form.grid1.recordsource = 'tmpcur'

Не отображается. Если прописать просто таблицу - все показывает. Как сделать правильно? 


--------------------
Если тебя жизнь трахает, значит, ты ещё живой
PM MAIL ICQ   Вверх
Cashey
Дата 8.6.2006, 14:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бессмертный
****


Профиль
Группа: Завсегдатай
Сообщений: 3441
Регистрация: 13.11.2002
Где: в столице

Репутация: 13
Всего: 60



Artiom, у тебя не присвоен RecordSource у Grid'а. Поэтому объекта Column у него нет. Поэтому, либо присвой этому свойству значение алиаса таблицы, либо пиши так:
Код

frmClForm = CREATEOBJECT('Form')  && Create a Form
WITH frmClForm
    .Closable   = .T.  && Disable the Control menu box 
    .MaxButton  = .F.
    .MinButton  = .F.
    .Autocenter = .T.
    .top = 20
    .Caption  = "Список"
    .Height   = _SCREEN.height - 80
    .Width    = 400
    .WindowState = 0
    .WindowType= 1
    .AddObject('grdGrid1','Grid')  && Add Grid control
    WITH .grdGrid1
        .Width    = 400
        .Height = _SCREEN.height - 80
        .ReadOnly = .T.
        .Visible    =.T.  && Grid control visible
        .DeleteMark =.F. 
        .RowHeight   = nRowHeight
        .FontName   = 'Courier New Cyr'
        .FontSize   = 9
        .FontItalic = .T.
        .AddColumn(1)
        .Column1.Header1.Caption  = "Колонка1"
        .AddColumn(2)
        .Column2.Header1.Caption  = "Колонка2"
        .Column1.Width = 50
        .Column2.Width = 350
        .ColumnCount = 2
        .SetAll("DynamicForeColor","IIF(pr_mode = 0,RGB(0,0,0),RGB(255,0,0))","Column")
    ENDWITH
ENDWITH


Добавлено @ 14:51 
Цитата(Artiom @  8.6.2006,  15:40 Найти цитируемый пост)
И еще сразу вопрос про грид.
пытаюсь отобразить в нем таблицу  

Во-первых, ты сразу же закрываешь свой курсор
Цитата(Artiom @  8.6.2006,  15:40 Найти цитируемый пост)
USE CLIENTS
    SELECT cl_num,cl_name FROM clients INTO CURSOR tmpcur NOFILTER 
    COUNT TO nRowCount
USE   


Во-вторых, код 
Цитата(Artiom @  8.6.2006,  15:40 Найти цитируемый пост)
cl_form.grid1.recordsourcetype = 1
cl_form.grid1.recordsource = 'tmpcur'

надо прописать в методе Init формы cl_form. если оставить как есть тогда надо следить, что бы форма не была модальной.

В третьих, вот код
Код

USE CLIENTS
    SELECT cl_num,cl_name FROM clients INTO CURSOR tmpcur NOFILTER 
IF _tally = 0 
    MESSAGEBOX("No records")
    return(-1)
ENDIF
DO FORM cl_form 
cl_form.grid1.recordsourcetype = 1
cl_form.grid1.recordsource = 'tmpcur'
    

Это сообщение отредактировал(а) Cashey - 8.6.2006, 15:09


--------------------
библия учит любить ближнего, а камасутра обучает как именно
PM Jabber   Вверх
Artiom
Дата 8.6.2006, 15:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1031
Регистрация: 11.3.2003
Где: Минск\Баку

Репутация: 3
Всего: 17



ага. понял. спасибо 


--------------------
Если тебя жизнь трахает, значит, ты ещё живой
PM MAIL ICQ   Вверх
Artiom
Дата 9.6.2006, 12:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1031
Регистрация: 11.3.2003
Где: Минск\Баку

Репутация: 3
Всего: 17



Cashey
Еще вопрос про привязку грида и данных. 

у меня таблица - logins. Из нее я считываю данные в курсор tmpcur привязываю к гриду. 
потом мне надо сделать стандартные действия (удаление, добавление. изменение)
сразу засел я на удалении. вот код обработчика кнопки "удалить"
Код

SET DELETED ON
lnmsgresult = messagebox('Удалить запись ?',36,'Удаление записи')
IF lnmsgresult != 6 
    RETURN
ENDIF
SELECT logins
=CURSORSETPROP('buffering',3)
BEGIN TRANSACTION 
IF !EOF()
    IF RLOCK()
     DELETE IN logins
     UNLOCK
     IF !TABLEUPDATE(1)
           =messagebox('Ошибка записи в logins.dbf !!!',16,'Ошибка')       
           UNLOCK
           ROLLBACK
           select logins
           use
           RETURN(0)
       ENDIF
       END TRANSACTION 
    ENDIF 
ELSE
    =messagebox('Ошибка удаления из logins.dbf !!!',16,'Ошибка')       
ENDIF
thisform.grid1.setfocus
thisform.grid1.Refresh
 
1. после удаления надо перезайти в форму, чтобы увидеть результат (я думал что этому поможет метод Refresh)
2. если выйти из программы и зайти снова - то все записи оказываются на месте (этого я хотел избежать, прописав SET DELETED ON в методе Init)
3. удаляются записи не те в которые я выделил, а начиная с первой. это я так понимаю из-за того, что удаляю я из logins, а отображаю tmpcur.

Вообщем вопрос - как грамотно организовать синхронизацию между данными отображаемыми в гриде и данными в таблице?
буду очень признателен за разъяснения
 


--------------------
Если тебя жизнь трахает, значит, ты ещё живой
PM MAIL ICQ   Вверх
Cashey
Дата 9.6.2006, 14:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бессмертный
****


Профиль
Группа: Завсегдатай
Сообщений: 3441
Регистрация: 13.11.2002
Где: в столице

Репутация: 13
Всего: 60



Artiom, ты меня извини, но по моему ты страдаешь фигней. Я конечно не знаю всей задачи, но по-моему у тебя что-то не то с организацие работы базы. Создал таблицу -> из нее выбрал данные в курсор -> продолжил работу..... не понятно с чем. Отобразил одно - отредактировал другое. 
В фоксе есть такая фича как VIEW, а начиная с 8-й версии еще и CursorAdapter. Которые и призваны выполнить ту работу, которую ты пытаешься выполнить. 
Цитата(Artiom @  9.6.2006,  13:04 Найти цитируемый пост)
=CURSORSETPROP('buffering',3)

Это конечно не суть важно, но все-таки использовать транзакцию для 3-ей буферизации нецелесообразно. Это мое IMHO.
Резюмирую. Тебе следует: создать в таблицах поле с уникальным значением (primary key); если используешь контейнер базы данных, заменит курсоры на вьюхи. Прописать руками update для вьюх или курсоров (если не используется memo поля, то это делается несколькими строчками кода)
Код

SELECT ViewName
SCATTER MEMVAR
IF SEEK(ViewName.id,"TableName","id")
    RELEASE m.id && это не обязательно, но что бы не возникало неожиданностей с индексом
    SELECT TableName
    GATHER MEMVAR
ELSE
    MESSAGEBOX("Запись удалена другим пользователем")
ENDIF
=REQUERY("ViewName")

Соответсвенно аналогичные коды на обработчик удаления и добавления записи. Это все можно сделать один раз и повесить на триггер вьюхи. С курсором тебе придется все прописывать ручками в каждом конкретном случае.  

Это сообщение отредактировал(а) Cashey - 9.6.2006, 14:51


--------------------
библия учит любить ближнего, а камасутра обучает как именно
PM Jabber   Вверх
vatras
Дата 31.10.2010, 00:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 11.6.2010

Репутация: нет
Всего: нет



У меня вопрос по гриду, так что не буду плодить темы.

Кнопка добавить у меня на форме с гридом, - я щелкаю добавить, запускается форма, добавляю, выхожу из формы, и с формой все окей, но грид залит сплошным цветом , никаких данных, ничего.
Все восстанавливается с перезапуском формы. Но отчего мне заливает грид ?

И еще одна досадная мелочь - когда после такой "заливки" грида я выхожу из формы а потом снова запускаю её, видны только 2-3 записи в таблице, чтобы увидеть все надо прокрутить немножко вверх. 
Кто-нибудь сталкивался с этой бедой ?
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Foxpro/Clipper/Dbase"
MoLeX

Запрещается!

1. Публиковать ссылки для чисто рекламных целей.

2. Оффтопить, флеймить, говорить не культурно.

Пожалуйста, адекватно задавайте свой вопрос. Тема должна создаваться с названием характеризующем Вашу проблему.

Задавайте вопросы правильно - как спросите, так вам и ответят.

Разрешено!

Давать ссылки на статьи, обзоры, если это не нарушает первый пункт правил.

Задавая вопрос, давайте нужную информацию касающуюся Вашей проблемы. Этим вы ускорите полезные ответы.

P.S. Размещение рекламы будет строго наказываться!



Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MoLeX

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Foxpro/Clipper/Dbase | Следующая тема »


 




[ Время генерации скрипта: 0.0474 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.