powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Как сделать такой Grid
19 сообщений из 19, страница 1 из 1
Как сделать такой Grid
    #34201790
МашкоБ.В.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть таблица disp4(code3,code,year,month,sum) и эта таблица должна заполняться в таком Gride.
Т.е. если я ставлю крестик в каком нибудь поле (1,2.....,12) то это значение должно записаться в таблицу в поле в disp11.month. И наоборот если disp11.month=3 то крестики должны стоять в колонке 3. Не спрашивайте зачем так мудрить просто так должно быть.
...
Рейтинг: 0 / 0
Как сделать такой Grid
    #34201792
МашкоБ.В.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ошибочка, таблица disp11(code3,code,year,month,sum)
...
Рейтинг: 0 / 0
Как сделать такой Grid
    #34201827
AleksMed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Источником грида д.б. курсор или RV/LV, например
select code3, code, year, (month=1) Month1, , (month=2) Month2, (month=3) Month3, ... into cursor MyCursor
...
Рейтинг: 0 / 0
Как сделать такой Grid
    #34201847
Burn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тебе для какой версии Фокса надо то?
Впринципе для VFP больших сложностей нет - вставляешь в колонку чекбокс, в качестве источника для стобца пишешь чтото вроде
IIF(seek(disp4.code3+disp4.code+disp4.year+<новер столбца>,'disp11'),.t.,.f.)
Ключь поиска указан от балды так как ни типов полей ни имеющихся индексо не указано. В Clik-е чекбокса просто прописываешь добавление или удаление соотвествующей строки из disp11
...
Рейтинг: 0 / 0
Как сделать такой Grid
    #34202429
МашкоБ.В.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AleksMedИсточником грида д.б. курсор или RV/LV, например
select code3, code, year, (month=1) Month1, , (month=2) Month2, (month=3) Month3, ... into cursor MyCursor

Я сделал так в Form16.Init я написал
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
thisform.grid1.RecordSource =''
select disp11.code3, disp9.name6, disp11.proc, disp11.sum,disp11.year, (month= 1 ) Month1,  (month= 2 ) Month2, (month= 3 ) Month3,(month= 4 ) Month4,(month= 5 ) Month5,(month= 6 ) Month6,(month= 7 ) Month7,(month= 8 ) Month8,(month= 9 ) Month9,(month= 10 ) Month10,(month= 11 ) Month11,(month= 12 ) Month12;
 FROM disp11 ;
 INNER JOIN data1!disp9 ;
   ON  Disp11.code = Disp9.code6 ;
 into cursor MyCursor
*!*	MyCursor
 WITH THISFORM.grid1 
     thisform.grid1.BackColor= RGB( 0 , 0 , 0 )
    .ColumnCount =  16 
	.RecordSource = 'MyCursor'
	.HeaderHeight =  30 
**************************************************	
	.Column1.ControlSource = "MyCursor.year"
	.Column1.Width =  40 
	.Column1.Name = "Column1"
	.Column1.ReadOnly = .F.
	.column1.header1.Caption = "Год"
	.column1.header1.Alignment =  0 
	.column1.header1.WordWrap = .T.
Сам select срабатывает нормально, но в Гриде Все колонки кроме 1....12 чёрные.
И ещё вопрос , при select значения колонок 1..12 принимает значения .F. или .T..
Я хочу что если .F. то поле пустое, иначе Х. Я понимаю надо проверку
if this.grid1.column5.text="F" this.grid1.column5.text.value=" " но куда ето прописать .
...
Рейтинг: 0 / 0
Как сделать такой Grid
    #34202442
AleksMed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторИ ещё вопрос , при select значения колонок 1..12 принимает значения .F. или .T..
Я хочу что если .F. то поле пустое, иначе Х.
Перепиши запрос:
Код: plaintext
1.
select disp11.code3, disp9.name6, disp11.proc, disp11.sum,disp11.year, iif(month= 1 ,"X"," ") Month1 ...
...
Рейтинг: 0 / 0
Как сделать такой Grid
    #34204468
МашкоБ.В.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Подскажите, если я Грид описал в инит формы. То где обрабатывать нажатие на колонку , ячейку грида. Нажимая правой кнопкой на гриде и вызывая Code кроме общей Грид ничего нет.
...
Рейтинг: 0 / 0
Как сделать такой Grid
    #34204495
Burn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Создать свой класс грида,хидера,колонок, контролов внутри с необходимым кодом.
Или почитать про функцию BindEvent()
...
Рейтинг: 0 / 0
Как сделать такой Grid
    #34204541
Фотография Aleksey-K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МашкоБ.В.Подскажите, если я Грид описал в инит формы. То где обрабатывать нажатие на колонку , ячейку грида. Нажимая правой кнопкой на гриде и вызывая Code кроме общей Грид ничего нет.
А все-таки, какая версия VFP у вас?
Поверьте, не праздный вопрос. От версии существенно зависит функциональность именно объекта GRID.
С уважением, Алексей.
...
Рейтинг: 0 / 0
Как сделать такой Grid
    #34204588
МашкоБ.В.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
У меня 9. Вопрос очень для меня важный т.к. с классами дела не имел и сейчас нет времени что-то такое делать.
...
Рейтинг: 0 / 0
Как сделать такой Grid
    #34205139
МашкоБ.В.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
BurnТебе для какой версии Фокса надо то?
Впринципе для VFP больших сложностей нет - вставляешь в колонку чекбокс, в качестве источника для стобца пишешь чтото вроде
IIF(seek(disp4.code3+disp4.code+disp4.year+<новер столбца>,'disp11'),.t.,.f.)
Ключь поиска указан от балды так как ни типов полей ни имеющихся индексо не указано. В Clik-е чекбокса просто прописываешь добавление или удаление соотвествующей строки из disp11

Идея интересная но как oбратится к методу Click, только если сздавать класс?
...
Рейтинг: 0 / 0
Как сделать такой Grid
    #34205409
МашкоБ.В.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Прошу прощения что ввел в заблуждение, пишу прогу под старые таблицы, только сейчас разобрался как заполняется этот Грид.
Есть таблицы disp4(code3,code,year,sum,proz) disp7(code3, code2,month,year,account)
Где code=code2
В гриде(как на рисунке) Год , Отдел и Сумма заполняются из disp4 а колонки 1,2...12 из disp7
При этом месяцев может быть несколько, т.е. в одной строчке несколько Х

Код я написал такой

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
thisform.grid1.RecordSource =''
select distinct disp4.code3,disp7.code2, disp9.name6,disp4.code, disp4.proc, disp4.account,disp4.year, iif(disp7.month= 1  ,"X"," ") Month1, iif(disp7.month= 2 ,"X"," ") Month2, iif(disp7.month= 3 ,"X"," ") Month3, iif(disp7.month= 4 ,"X"," ") Month4, iif(disp7.month= 5 ,"X"," ") Month5,iif(disp7.month= 6 ,"X"," ") Month6, iif(disp7.month= 7 ,"X"," ") Month7, iif(disp7.month= 8 ,"X"," ") Month8, iif(disp7.month= 9 ,"X"," ") Month9, iif(disp7.month= 10 ,"X"," ") Month10, iif(disp7.month= 11 ,"X"," ") Month11,iif(disp7.month= 12 ,"X"," ") Month12;
 FROM disp4;
 INNER JOIN data1!disp9 ;
   ON  Disp4.code = Disp9.code6 ;
   INNER JOIN data1!disp7 ;
   ON  Disp4.code3 = Disp7.code3  AND  Disp4.code = Disp7.code2 ;
        WHERE disp4.code3=lnCode3;
 into cursor MyCursor
 
 WITH THISFORM.grid1 
     thisform.grid1.BackColor= RGB( 255 , 255 , 255 )
    .ColumnCount =  17 
	.RecordSource = 'MyCursor'
	.HeaderHeight =  30 
	.FontSize= 14 
**************************************************	
	.Column1.ControlSource = "MyCursor.year"
	.Column1.Width =  50 
	.Column1.Name = "Column1"
	.Column1.ReadOnly = .F.
	.column1.header1.Caption = "Ãîä"
	.column1.header1.Alignment =  0 
	.column1.header1.WordWrap = .T.
		.........
	.Column16.ControlSource = "MyCursor.Month12"
	.Column16.Width =  30 
	.Column16.Name = "Column16"
	.Column16.ReadOnly = .F.
	.column16.header1.Caption = "12"
	.column16.header1.Alignment =  0 
	.column16.header1.WordWrap = .T.
	
				ENDWITH
При таком коде, каждый Х отображается в одной строчке, как сделать чтобы все Х были в одной строке. Я приложил эти таблицы.
...
Рейтинг: 0 / 0
Как сделать такой Grid
    #34207468
МашкоБ.В.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Может я неправильно что пояснил, в принципе должно быть так
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
В таблице disp4(code3,name) 
code3 name 
1      pop 
2       lol 

В таблице disp7(code3,month)
code3   month
1        5
1        6
1        8
2        1

Запрос надо составить так чтобы в гриде отобразилось так
code3 name  1 2 3 4 5 6 7 8 9 10 11 12
1         pop             X X   X
2          lol    X

А по моему запросу отображается вот так
code3 name  1 2 3 4 5 6 7 8 9 10 11 12

1         pop                    X
1         pop                X   
1         pop             X    
2         lol    X
Может есть какие идеи.
...
Рейтинг: 0 / 0
Как сделать такой Grid
    #34207518
Фотография Aleksey-K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МашкоБ.В.Может я неправильно что пояснил, в принципе должно быть так
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
В таблице disp4(code3,name) 
code3 name 
1      pop 
2       lol 

В таблице disp7(code3,month)
code3   month
1        5
1        6
1        8
2        1

Запрос надо составить так чтобы в гриде отобразилось так
code3 name  1 2 3 4 5 6 7 8 9 10 11 12
1         pop             X X   X
2          lol    X

А по моему запросу отображается вот так
code3 name  1 2 3 4 5 6 7 8 9 10 11 12

1         pop                    X
1         pop                X   
1         pop             X    
2         lol    X
Может есть какие идеи.
Если все надо в одном запросе, то без корреляционных подзапросов не обойтись.
Примерно так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
SELECT d.code3, d.name
, iif(select count(*) from disp7 r where r.code3 = d.code3 and r.month =  1 ) >  0 , 'X', ' ') AS m1
, iif(select count(*) from disp7 r where r.code3 = d.code3 and r.month =  2 ) >  0 , 'X', ' ') AS m2
, iif(select count(*) from disp7 r where r.code3 = d.code3 and r.month =  3 ) >  0 , 'X', ' ') AS m3
, iif(select count(*) from disp7 r where r.code3 = d.code3 and r.month =  4 ) >  0 , 'X', ' ') AS m4
, iif(select count(*) from disp7 r where r.code3 = d.code3 and r.month =  5 ) >  0 , 'X', ' ') AS m5
, iif(select count(*) from disp7 r where r.code3 = d.code3 and r.month =  6 ) >  0 , 'X', ' ') AS m6
, iif(select count(*) from disp7 r where r.code3 = d.code3 and r.month =  7 ) >  0 , 'X', ' ') AS m7
, iif(select count(*) from disp7 r where r.code3 = d.code3 and r.month =  8 ) >  0 , 'X', ' ') AS m8
, iif(select count(*) from disp7 r where r.code3 = d.code3 and r.month =  9 ) >  0 , 'X', ' ') AS m9
, iif(select count(*) from disp7 r where r.code3 = d.code3 and r.month =  10 ) >  0 , 'X', ' ') AS m10
, iif(select count(*) from disp7 r where r.code3 = d.code3 and r.month =  11 ) >  0 , 'X', ' ') AS m11
, iif(select count(*) from disp7 r where r.code3 = d.code3 and r.month =  12 ) >  0 , 'X', ' ') AS m12
from disp4 d
order by d.code3
...
Рейтинг: 0 / 0
Как сделать такой Grid
    #34207695
Maltsev Max
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
МашкоБ.В.Может я неправильно что пояснил, в принципе должно быть так
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
В таблице disp4(code3,name) 
code3 name 
1      pop 
2       lol 

В таблице disp7(code3,month)
code3   month
1        5
1        6
1        8
2        1

Запрос надо составить так чтобы в гриде отобразилось так
code3 name  1 2 3 4 5 6 7 8 9 10 11 12
1         pop             X X   X
2          lol    X

А по моему запросу отображается вот так
code3 name  1 2 3 4 5 6 7 8 9 10 11 12

1         pop                    X
1         pop                X   
1         pop             X    
2         lol    X
Может есть какие идеи.

Да ну, господа ...
Все же просто !!! :-))

http://]SELECT d.code3, d.name,
Max(iif((r.month = 1) > 0, 'X', ' ')) AS m1,
Max(iif((r.month = 2) > 0, 'X', ' ')) AS m2,
Max(iif((r.month = 3) > 0, 'X', ' ')) AS m3,
Max(iif((r.month = 4) > 0, 'X', ' ')) AS m4,
Max(iif((r.month = 5) > 0, 'X', ' ')) AS m5,
Max(iif((r.month = 6) > 0, 'X', ' ')) AS m6,
Max(iif((r.month = 7) > 0, 'X', ' ')) AS m7,
Max(Iif((r.month = 8) > 0, 'X', ' ')) AS m8,
Max(iif((r.month = 9) > 0, 'X', ' ')) AS m9,
Max(iif((r.month = 10) > 0, 'X', ' ')) AS m10,
Max(iif((r.month = 11) > 0, 'X', ' ')) AS m11,
Max(iif((r.month = 12) > 0, 'X', ' ')) AS m12
from disp4 d
Left Join disp7 r on r.code3=d.code3
order by d.code3
Group by d.code3
...
Рейтинг: 0 / 0
Как сделать такой Grid
    #34207770
Фотография Aleksey-K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Maltsev Max
Да ну, господа ...
Все же просто !!! :-))

http://]SELECT d.code3, d.name,
Max(iif((r.month = 1) > 0, 'X', ' ')) AS m1,
Max(iif((r.month = 2) > 0, 'X', ' ')) AS m2,
Max(iif((r.month = 3) > 0, 'X', ' ')) AS m3,
Max(iif((r.month = 4) > 0, 'X', ' ')) AS m4,
Max(iif((r.month = 5) > 0, 'X', ' ')) AS m5,
Max(iif((r.month = 6) > 0, 'X', ' ')) AS m6,
Max(iif((r.month = 7) > 0, 'X', ' ')) AS m7,
Max(Iif((r.month = 8) > 0, 'X', ' ')) AS m8,
Max(iif((r.month = 9) > 0, 'X', ' ')) AS m9,
Max(iif((r.month = 10) > 0, 'X', ' ')) AS m10,
Max(iif((r.month = 11) > 0, 'X', ' ')) AS m11,
Max(iif((r.month = 12) > 0, 'X', ' ')) AS m12
from disp4 d
Left Join disp7 r on r.code3=d.code3
order by d.code3
Group by d.code3
Может и просто, но запрос синтаксически не верный с точки зрения ANSI: (и при SET ENGINEBEHAVIOR 80)
1. В список полей включены поля по которому нет группировки и не применена агрегатная функция.
2. ORDER BY должно быть после GROUP BY
С уважением, Алексей.
...
Рейтинг: 0 / 0
Как сделать такой Grid
    #34209040
МашкоБ.В.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Aleksey-K Если все надо в одном запросе, то без корреляционных подзапросов не обойтись.
Примерно так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
SELECT d.code3, d.name
, iif(select count(*) from disp7 r where r.code3 = d.code3 and r.month =  1 ) >  0 , 'X', ' ') AS m1
, iif(select count(*) from disp7 r where r.code3 = d.code3 and r.month =  2 ) >  0 , 'X', ' ') AS m2
, iif(select count(*) from disp7 r where r.code3 = d.code3 and r.month =  3 ) >  0 , 'X', ' ') AS m3
, iif(select count(*) from disp7 r where r.code3 = d.code3 and r.month =  4 ) >  0 , 'X', ' ') AS m4
, iif(select count(*) from disp7 r where r.code3 = d.code3 and r.month =  5 ) >  0 , 'X', ' ') AS m5
, iif(select count(*) from disp7 r where r.code3 = d.code3 and r.month =  6 ) >  0 , 'X', ' ') AS m6
, iif(select count(*) from disp7 r where r.code3 = d.code3 and r.month =  7 ) >  0 , 'X', ' ') AS m7
, iif(select count(*) from disp7 r where r.code3 = d.code3 and r.month =  8 ) >  0 , 'X', ' ') AS m8
, iif(select count(*) from disp7 r where r.code3 = d.code3 and r.month =  9 ) >  0 , 'X', ' ') AS m9
, iif(select count(*) from disp7 r where r.code3 = d.code3 and r.month =  10 ) >  0 , 'X', ' ') AS m10
, iif(select count(*) from disp7 r where r.code3 = d.code3 and r.month =  11 ) >  0 , 'X', ' ') AS m11
, iif(select count(*) from disp7 r where r.code3 = d.code3 and r.month =  12 ) >  0 , 'X', ' ') AS m12
from disp4 d
order by d.code3


Решение интересное но при выполнении selecta у меня возникает ошибка 1845
Visual FoxPro ran out of memory when it tried to expand the SELECT statement in order to analyze it.
Типа не хватает памяти, для вычисления selecta как можно по другому.
...
Рейтинг: 0 / 0
Как сделать такой Grid
    #34209253
Фотография Aleksey-K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А что дает вариант Maltsev Max ?
В VFP он должен работать.
С уважением, Алексей
...
Рейтинг: 0 / 0
Как сделать такой Grid
    #34209950
Maltsev Max
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Aleksey-K Maltsev Max
Да ну, господа ...
Все же просто !!! :-))

http://]SELECT d.code3, d.name,
Max(iif((r.month = 1) > 0, 'X', ' ')) AS m1,
Max(iif((r.month = 2) > 0, 'X', ' ')) AS m2,
Max(iif((r.month = 3) > 0, 'X', ' ')) AS m3,
Max(iif((r.month = 4) > 0, 'X', ' ')) AS m4,
Max(iif((r.month = 5) > 0, 'X', ' ')) AS m5,
Max(iif((r.month = 6) > 0, 'X', ' ')) AS m6,
Max(iif((r.month = 7) > 0, 'X', ' ')) AS m7,
Max(Iif((r.month = 8) > 0, 'X', ' ')) AS m8,
Max(iif((r.month = 9) > 0, 'X', ' ')) AS m9,
Max(iif((r.month = 10) > 0, 'X', ' ')) AS m10,
Max(iif((r.month = 11) > 0, 'X', ' ')) AS m11,
Max(iif((r.month = 12) > 0, 'X', ' ')) AS m12
from disp4 d
Left Join disp7 r on r.code3=d.code3
order by d.code3
Group by d.code3
Может и просто, но запрос синтаксически не верный с точки зрения ANSI: (и при SET ENGINEBEHAVIOR 80)
1. В список полей включены поля по которому нет группировки и не применена агрегатная функция.
2. ORDER BY должно быть после GROUP BY
С уважением, Алексей.


Вот. Пожалуйста.....
Учтены все пожелания про соответствие ANSI и исправлены синтаксические ошибки ...
Прошу прощения, не проверял, наугад запрос писал ...
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
SELECT d.code3, d.name, ;
Max(iif((r.month =  1 ), 'X', ' ')) AS m1, ;
Max(iif((r.month =  2 ), 'X', ' ')) AS m2, ;
Max(iif((r.month =  3 ), 'X', ' ')) AS m3, ;
Max(iif((r.month =  4 ), 'X', ' ')) AS m4, ;
Max(iif((r.month =  5 ), 'X', ' ')) AS m5, ;
Max(iif((r.month =  6 ), 'X', ' ')) AS m6, ;
Max(iif((r.month =  7 ), 'X', ' ')) AS m7, ;
Max(Iif((r.month =  8 ) , 'X', ' ')) AS m8, ;
Max(iif((r.month =  9 ),  'X', ' ')) AS m9, ;
Max(iif((r.month =  10 ), 'X', ' ')) AS m10,;
Max(iif((r.month =  11 ), 'X', ' ')) AS m11, ;
Max(iif((r.month =  12 ), 'X', ' ')) AS m12;
from disp4 d;
Left Join disp7 r on r.code3=d.code3;
Group by d.name, d.code3
Order by d.name, d.code3
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Как сделать такой Grid
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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