Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Как сделать такой Grid / 19 сообщений из 19, страница 1 из 1
15.12.2006, 09:07
    #34201790
МашкоБ.В.
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать такой Grid
Есть таблица disp4(code3,code,year,month,sum) и эта таблица должна заполняться в таком Gride.
Т.е. если я ставлю крестик в каком нибудь поле (1,2.....,12) то это значение должно записаться в таблицу в поле в disp11.month. И наоборот если disp11.month=3 то крестики должны стоять в колонке 3. Не спрашивайте зачем так мудрить просто так должно быть.
...
Рейтинг: 0 / 0
15.12.2006, 09:09
    #34201792
МашкоБ.В.
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать такой Grid
Ошибочка, таблица disp11(code3,code,year,month,sum)
...
Рейтинг: 0 / 0
15.12.2006, 09:24
    #34201827
AleksMed
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать такой Grid
Источником грида д.б. курсор или RV/LV, например
select code3, code, year, (month=1) Month1, , (month=2) Month2, (month=3) Month3, ... into cursor MyCursor
...
Рейтинг: 0 / 0
15.12.2006, 09:31
    #34201847
Burn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать такой Grid
Тебе для какой версии Фокса надо то?
Впринципе для VFP больших сложностей нет - вставляешь в колонку чекбокс, в качестве источника для стобца пишешь чтото вроде
IIF(seek(disp4.code3+disp4.code+disp4.year+<новер столбца>,'disp11'),.t.,.f.)
Ключь поиска указан от балды так как ни типов полей ни имеющихся индексо не указано. В Clik-е чекбокса просто прописываешь добавление или удаление соотвествующей строки из disp11
...
Рейтинг: 0 / 0
15.12.2006, 11:50
    #34202429
МашкоБ.В.
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать такой Grid
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
15.12.2006, 11:54
    #34202442
AleksMed
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать такой Grid
авторИ ещё вопрос , при 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
15.12.2006, 20:35
    #34204468
МашкоБ.В.
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать такой Grid
Подскажите, если я Грид описал в инит формы. То где обрабатывать нажатие на колонку , ячейку грида. Нажимая правой кнопкой на гриде и вызывая Code кроме общей Грид ничего нет.
...
Рейтинг: 0 / 0
15.12.2006, 21:12
    #34204495
Burn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать такой Grid
Создать свой класс грида,хидера,колонок, контролов внутри с необходимым кодом.
Или почитать про функцию BindEvent()
...
Рейтинг: 0 / 0
15.12.2006, 21:57
    #34204541
Aleksey-K
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать такой Grid
МашкоБ.В.Подскажите, если я Грид описал в инит формы. То где обрабатывать нажатие на колонку , ячейку грида. Нажимая правой кнопкой на гриде и вызывая Code кроме общей Грид ничего нет.
А все-таки, какая версия VFP у вас?
Поверьте, не праздный вопрос. От версии существенно зависит функциональность именно объекта GRID.
С уважением, Алексей.
...
Рейтинг: 0 / 0
15.12.2006, 23:00
    #34204588
МашкоБ.В.
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать такой Grid
У меня 9. Вопрос очень для меня важный т.к. с классами дела не имел и сейчас нет времени что-то такое делать.
...
Рейтинг: 0 / 0
16.12.2006, 19:22
    #34205139
МашкоБ.В.
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать такой Grid
BurnТебе для какой версии Фокса надо то?
Впринципе для VFP больших сложностей нет - вставляешь в колонку чекбокс, в качестве источника для стобца пишешь чтото вроде
IIF(seek(disp4.code3+disp4.code+disp4.year+<новер столбца>,'disp11'),.t.,.f.)
Ключь поиска указан от балды так как ни типов полей ни имеющихся индексо не указано. В Clik-е чекбокса просто прописываешь добавление или удаление соотвествующей строки из disp11

Идея интересная но как oбратится к методу Click, только если сздавать класс?
...
Рейтинг: 0 / 0
17.12.2006, 01:22
    #34205409
МашкоБ.В.
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать такой Grid
Прошу прощения что ввел в заблуждение, пишу прогу под старые таблицы, только сейчас разобрался как заполняется этот Грид.
Есть таблицы 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
18.12.2006, 14:18
    #34207468
МашкоБ.В.
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать такой Grid
Может я неправильно что пояснил, в принципе должно быть так
Код: 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
18.12.2006, 14:31
    #34207518
Aleksey-K
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать такой Grid
МашкоБ.В.Может я неправильно что пояснил, в принципе должно быть так
Код: 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
18.12.2006, 15:25
    #34207695
Maltsev Max
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать такой Grid
МашкоБ.В.Может я неправильно что пояснил, в принципе должно быть так
Код: 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
18.12.2006, 15:40
    #34207770
Aleksey-K
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать такой Grid
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
18.12.2006, 23:28
    #34209040
МашкоБ.В.
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать такой Grid
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
19.12.2006, 08:02
    #34209253
Aleksey-K
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать такой Grid
А что дает вариант Maltsev Max ?
В VFP он должен работать.
С уважением, Алексей
...
Рейтинг: 0 / 0
19.12.2006, 12:01
    #34209950
Maltsev Max
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать такой Grid
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
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Как сделать такой Grid / 19 сообщений из 19, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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