Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Массив / 6 сообщений из 6, страница 1 из 1
07.02.2004, 22:59
    #32401769
Новичек_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Массив
То ли сани не едут, то ли что.
Пытаюсь удалить из массива все поля кроме дат:
Хочу оставить массив типа
1 /Table.Field_on/D
2 /Table.Field_zwai/D
3 /Table.Field3_dray/D
и без всяких там
F/F/F заместо других полей!!!


MY_=THIS.Gridname && выясняем название грида
loGridname=&MY_ && делаем ссылку на объект

PUBLIC laControlSource(loGridname.ColumnCount,3)
FOR I=1 TO loGridname.ColumnCount && количество столбцов в этом гриде
loCol=loGridname.Columns(I)
laControlSource(I,1) = i
laControlSource(I,2) = loCol.ControlSource
laControlSource(I,3) = TYPE(laControlSource(I,2))
ENDFOR
*!!!!!Массив красиво построился, как хотел!!!!!!!!!!


*Теперь пытаемся безуспешно удалить поля "не D"
FOR m.i =1 TO ALEN(laControlSource,1)
IF TYPE('laControlSource[m.i,2]')="N" .OR. TYPE('laControlSource[m.i,2]')="C" .OR.TYPE('laControlSource[m.i,2]')="L"
ADEL(laControlSource,m.i)
ENDIF
ENDFOR
*!!!!! НЕ получается удалить!!!!!!!!


IF .f.
*Удаляем из массива не поля ДАТЫ(через заднеее место!!!)
FOR m.i =1 TO ALEN(laControlSource,1)
IF TYPE('laControlSource[m.i,2]')="C" .OR.;
TYPE('laControlSource[m.i,2]')="N" .OR.;
TYPE('laControlSource[m.i,2]')="M" .OR.;
TYPE('laControlSource[m.i,2]')="G" .OR.;
TYPE('laControlSource[m.i,2]')="U" .OR.;
TYPE('laControlSource[m.i,2]')="Y" .OR.;
TYPE('laControlSource[m.i,2]')="T" .OR.;
TYPE('laControlSource[m.i,2]')="L" .OR.;
TYPE('laControlSource[m.i,2]')="O"
=ADEL(laControlSource,m.i)
ENDIF
ENDFOR
ENDIF
...
Рейтинг: 0 / 0
08.02.2004, 00:51
    #32401778
Андрей Давыдов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Массив
ADEL() - удаляет строку и сдвигает данные, но не меняет размерность массива.
Надо еще поменять размерность массива DIMENSION

Примерно так:
.....
LOCAL lnDel
lnDel=0 && Количество вычищаемых строк.
FOR I =1 TO ALEN(laControlSource,1)
lnDel=lnDel+IIF(!INLI(TYPE('laControlSource(I,2)'),"D",....) and ADEL(laControlSource,I)=1,1,0)
ENDIF
ENDF
DIME laControlSource(MAX(ALEN(laControlSource,1)-lnDel,1),3)
....
...
Рейтинг: 0 / 0
08.02.2004, 00:55
    #32401779
Новичек_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Массив
И комбо глючит, ничего не понимаю!!!!
фокс 8-SP1.
Все уж по этому вопросу в форумах по фоксу я прочел...
В ините контейнера формирую свойства комбо
В дизайнере все установки дефолтные.
Примерно так выглядит массив (сделал свойством контейнера.)
1 /Table.Field_on/D
Свойство массив в дюбагере формируется.

Любая модификация с использованием
закомментирования ниже приведенных строк
в различных вариантах, количесве и комбинации :-))),
в течении 3 часов не
приводит к результату: то есть при клике на выбор из комбо
в раскрывающемся списке видим Table.Field_on
->выбираем->видим 1
в иините контейнера формируем свойства комбо:
THIS.Combo1.BoundColumn=2 && && и для интереса 1,2,3 тоже не помогает
This.Combo1.BoundTo=.t. && и .F. тоже не помогает
THIS.Combo1.ColumnCount=3
THIS.Combo1.RowSourceType = 5
THIS.Combo1.RowSource ="THIS.Parent.laControlSource"
*THIS.Combo1.VALUE = THIS.Combo1.LIST[2]
THIS.Combo1.ColumnWidths="0,150,0"
This.Combo1.ColumnLines= .F.
This.Combo1.requery()
This.Combo1.refresh()
THIS.Combo1.DisplayValue=1
...
Рейтинг: 0 / 0
08.02.2004, 01:17
    #32401781
Андрей Давыдов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Массив
ComboBox в текстовой части всегда показывает данные из первой колонки,
а RecordSource и Value зависят от BoundColumn=N.
Переделай массив.

Удачи.
...
Рейтинг: 0 / 0
08.02.2004, 01:41
    #32401784
Новичек_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Массив
Здравствуйте Андрей, спасибо за помощь, но...
>ComboBox в текстовой части всегда показывает данные из первой колонки,
>а RecordSource и Value зависят от BoundColumn=N.
безобразие!!! Это что вообще не как не победить
без перестройки ммассива???
Это же не очень логично!?
>>>Переделай массив.
Чего делать, то -переделаю...


Ваша функция....
LOCAL lnDel
lnDel=0 && Количество вычищаемых строк.
FOR I =1 TO ALEN(laControlSource,1)
lnDel=lnDel+IIF(!INLI(TYPE('laControlSource(I,2)'),"D",....) and ADEL(laControlSource,I)=1,1,0)
ENDIF
ENDF
DIME laControlSource(MAX(ALEN(laControlSource,1)-lnDel,1),3)

...возвращает ..... только первое поле в массиве, значит
не в какой тип поля не входит "D", а это не так!!!!
Хотя TYPE( возвращает символьное выражение......-странно как-то...
Не помогает поиск по 3-му столбцу массива просто функциеей inlist().....
И даже так не помогает :-))))
INLIST("C","N",TYPE('laControlSource(I,2)'))
...
Рейтинг: 0 / 0
08.02.2004, 01:46
    #32401785
Андрей Давыдов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Массив
Ошибка: TYPE('laControlSource(I,2)') всегда равно "C" - строка с источником данных, надо: TYPE(laControlSource(I,2)) - все будет путем.
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Массив / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]