Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / DW column / 25 сообщений из 37, страница 1 из 2
04.11.2004, 08:57
    #32767858
DIGITALPRO
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DW column
DW grid
Как узнать какой по счету идет колонка?
...
Рейтинг: 0 / 0
04.11.2004, 09:33
    #32767915
gean
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DW column
dw_control.Object.controlname.ID
где controlname - название колонки
...
Рейтинг: 0 / 0
04.11.2004, 09:42
    #32767934
Ikar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DW column
Код: plaintext
1.
2.
string n
n = dw_control.Describe('columnName.ID')
messagebox('', n)
---
С уважением, IKAR

ikarhomecenter@narod.ru
IkarHomeCenter
...
Рейтинг: 0 / 0
04.11.2004, 10:07
    #32768004
DIGITALPRO
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DW column
Ваши варианты не подходят.
Допустим DW состоит из 5 колонок, пользователь передвинул 4-ю на 1-е место
следовательно теперь у этой колонки д/б значение 1, а не то что было при построении

Вопрос в следующем определить № колонки какой она отображается в DW
...
Рейтинг: 0 / 0
04.11.2004, 10:35
    #32768074
Высоцкий
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DW column
li_x = Describe ( "column.x" )
Потом сортировка
...
Рейтинг: 0 / 0
04.11.2004, 10:48
    #32768112
DIGITALPRO
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DW column
Высоцкий
А можно по подробнее?

===============================
PB 9.0.1 (7236) ASA 9.0.0 (1312)
...
Рейтинг: 0 / 0
04.11.2004, 11:01
    #32768151
ASCRUS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DW column
При изменении порядка колонок в гриде их id не меняется. Нужно работать с TabSequence:
Код: plaintext
Describe( 'ColumnName.TabSequence' )
...
Рейтинг: 0 / 0
04.11.2004, 12:12
    #32768414
Я
Я
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DW column
авторПри изменении порядка колонок в гриде их id не меняется. Нужно работать с TabSequence:

а если нету таба че тады :-)
...
Рейтинг: 0 / 0
04.11.2004, 12:27
    #32768458
DIGITALPRO
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DW column
Код: plaintext
Describe( 'ColumnName.TabSequence' )
Работает, спасибо!
...
Рейтинг: 0 / 0
04.11.2004, 15:15
    #32768995
DIGITALPRO
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DW column
А действительно, если Tab Order = 0 тогда как определить?
...
Рейтинг: 0 / 0
04.11.2004, 15:47
    #32769065
Я
Я
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DW column
тебе уже писали
li_x = Describe ( "column.x" )
Потом сортировка
...
Рейтинг: 0 / 0
04.11.2004, 16:28
    #32769177
DIGITALPRO
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DW column
Код: plaintext
li_x = Describe ( "column.x" )
это не №, а координата!
Я понимаю, что теперь можно вычислить, но это неудобно
...
Рейтинг: 0 / 0
04.11.2004, 16:56
    #32769260
PL99
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DW column
DIGITALPRO
Код: plaintext
li_x = Describe ( "column.x" )
это не №, а координата!
Я понимаю, что теперь можно вычислить, но это неудобноМного раз уже об этом говорили, еще повторюсь - спрашивайте, что надо сделать, а не как сделать шаг по пути, который вам кажется правильным . Тогда и ответы будут по существу.
Итак, что надо сделать? Сохранение/восстановление порядка следования колонок и их ширину в гриде?
...
Рейтинг: 0 / 0
04.11.2004, 17:28
    #32769342
Филипп
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DW column
ASCRUSПри изменении порядка колонок в гриде их id не меняется. Нужно работать с TabSequence:
Код: plaintext
Describe( 'ColumnName.TabSequence' )


Ну и очевидно, что этот ответ надо просто игнорировать :-)
...
Рейтинг: 0 / 0
05.11.2004, 05:45
    #32769784
Guest_2
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DW column
авторli_x = Describe ( "column.x" )
это не №, а координата!
Я понимаю, что теперь можно вычислить, но это неудобно
А Вы не стесняйтесь - вычисляйте. Вы же разработчик, а не девица на выданье.
...
Рейтинг: 0 / 0
05.11.2004, 08:24
    #32769863
DIGITALPRO
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DW column
ОК.
Имеется форма, в ней 2 DW (DW1 и DW2), связь один ко многим.
Имеется кнопочка "Перенос в Excel"
Суть: перебрать записи (в зависимости от параметров выбранных пользователем) из DW1 и DW2 и Видимые колонки, запихаить их в Excel
У меня скрипт следующий:

Код: 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.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
OpenWithParm( w_excel, li_dw2v )

if IsValid ( Message.powerobjectparm ) then
	str_ex = Message.powerobjectparm
else
	MessageBox ( 'Îøèáêà' , 'Íåâîçìîæíî óñòàíîâèòü ñâÿçü ñ îáúåêòîì, îáðàòèòåñü ê ðàçðàáîò÷èêàì' )
	return
end if
if str_ex.dw1 = '-1' then RETURN

================================================
OleObject Ole_XLS
Integer li_cln1, li_row_count1, li_cln_v1
Integer li_cln2, li_row_count2, li_cln_v2
Integer li_row_count0
Integer li_Tab 

Ole_XLS = Create oleobject
if Ole_XLS.connecttonewobject("Excel.Application") <>  0  then
	MessageBox('Îøèáêà','Íåâîçìîæíî çàïóñòèòü Excel', Stopsign!)
	Return
end if

Ole_XLS.displayAlerts = False

Ole_XLS.Workbooks.Add( )

li_row_count1 =  1 
li_row_count0 =  2 
	do while li_row_count1 <= dw_1.rowcount( )
		dw_1.setrow( li_row_count1 )
		li_cln1 =  1 
		li_cln_v1 =  1 
		do while li_cln1 <= Long(dw_1.object.DataWindow.column.count)
			dw_1.setcolumn( li_cln1 )
			
			if dw_1.describe( '#' + String(li_cln1) + '.visible' ) = '1' and dw_1.getcolumnname( ) <> 'row_sel' then
				li_Tab = Integer(dw_1.Describe(dw_1.getcolumnname( )+'.TabSequence'))/ 10 +(- 1 )
				if li_row_count0 =  2  then Ole_XLS.WorkBooks( 1 ).ActiveSheet.Cells( 1 ,li_Tab).Value = dw_1.describe( dw_1.getcolumnname( )+ '_t.text')
				if str_ex.dw1 = 'All' then Ole_XLS.WorkBooks( 1 ).ActiveSheet.Cells(li_row_count0,/*li_cln_v1*/li_Tab).Value = dw_1.gettext()
				if str_ex.dw1 = 'Check' and dw_1.object.row_sel[li_row_count1] =  1  then Ole_XLS.WorkBooks( 1 ).ActiveSheet.Cells(li_row_count0,/*li_cln_v1*/li_Tab).Value = dw_1.gettext()
				li_cln_v1 ++
			end if
			li_cln1 ++
		loop;
		
			li_row_count2 =  1 
			do while li_row_count2 <= dw_2.rowcount( ) and str_ex.dw2 = 'Grid'
				li_cln_v2 = li_cln_v1
				li_cln2 =  1 
				dw_2.setrow( li_row_count2 )
								
			             li_cln1 =  1 
				do while li_cln1 <= Long(dw_1.object.DataWindow.column.count)
					dw_1.setcolumn( li_cln1 )
			
					if dw_1.describe( '#' + String(li_cln1) + '.visible' ) = '1' and dw_1.getcolumnname( ) <> 'row_sel' then
						li_Tab = Integer(dw_1.Describe(dw_1.getcolumnname( )+'.TabSequence'))/ 10 +(- 1 )
						if str_ex.dw1 = 'All' then Ole_XLS.WorkBooks( 1 ).ActiveSheet.Cells(li_row_count0,li_Tab).Value = dw_1.gettext()
						if str_ex.dw1 = 'Check' and dw_1.object.row_sel[li_row_count1] =  1  then Ole_XLS.WorkBooks( 1 ).ActiveSheet.Cells(li_row_count0,/*li_cln_v1*/li_Tab).Value = dw_1.gettext()
					//li_cln_v1 ++
					end if
					li_cln1 ++
				loop;
		
				do while li_cln2 <= Long(dw_2.object.DataWindow.column.count)
					dw_2.setcolumn( li_cln2 )
					if dw_2.describe( '#' + String(li_cln2) + '.visible' ) = '1' and dw_2.getcolumnname( ) <> 'row_sel' then
						li_Tab = Integer(dw_2.Describe(dw_2.getcolumnname( )+'.TabSequence'))/ 10 +li_cln_v1+(- 2 )
						if li_row_count0 =  2  then Ole_XLS.WorkBooks( 1 ).ActiveSheet.Cells( 1 ,li_Tab).Value = dw_2.describe( dw_2.getcolumnname( )+ '_t.text')
						if str_ex.dw1 = 'All' then Ole_XLS.WorkBooks( 1 ).ActiveSheet.Cells(li_row_count0,/*li_cln_v2*/li_Tab).Value = dw_2.gettext()
						if str_ex.dw1 = 'Check' and dw_1.object.row_sel[li_row_count1] =  1  then Ole_XLS.WorkBooks( 1 ).ActiveSheet.Cells(li_row_count0,/*li_cln_v2*/li_Tab).Value = dw_2.gettext()
						li_cln_v2 ++
					end if
					li_cln2 ++
				loop
			if str_ex.dw1 = 'All' then li_row_count0 ++
			if str_ex.dw1 = 'Check' and dw_1.object.row_sel[li_row_count1] =  1  then li_row_count0 ++
			li_row_count2 ++
			loop
			do while li_row_count2 <= dw_2.rowcount( ) and str_ex.dw2 = 'Free'
				li_cln_v2 =  1 
				li_cln2 =  1 
				dw_2.setrow( li_row_count2 )
				do while li_cln2 <= Long(dw_2.object.DataWindow.column.count)
					dw_2.setcolumn( li_cln2 )
					if dw_2.describe( '#' + String(li_cln2) + '.visible' ) = '1' and dw_2.getcolumnname( ) <> 'row_sel' then
						li_Tab = Integer(dw_2.Describe(dw_2.getcolumnname( )+'.TabSequence'))/ 10 +(- 1 )
						
						//Ole_XLS.WorkBooks( 1 ).ActiveSheet.Cells(li_row_count0+ 1 ,li_Tab).Value = dw_2.describe( dw_2.getcolumnname( )+ '_t.text')
						
						if str_ex.dw1 = 'All' then Ole_XLS.WorkBooks( 1 ).ActiveSheet.Cells(li_row_count0+ 1 ,/*li_cln_v2*/li_Tab).Value = dw_2.gettext()
						if str_ex.dw1 = 'Check' and dw_1.object.row_sel[li_row_count1] =  1  then Ole_XLS.WorkBooks( 1 ).ActiveSheet.Cells(li_row_count0+ 1 ,/*li_cln_v2*/li_Tab).Value = dw_2.gettext()
						li_cln_v2 ++
					end if
					li_cln2 ++
				loop

			if str_ex.dw1 = 'All' then li_row_count0 ++ 
			if str_ex.dw1 = 'Check' and dw_1.object.row_sel[li_row_count1] =  1  then li_row_count0 ++
			li_row_count2 ++
			loop
		
		if str_ex.dw1 = 'All' and str_ex.dw2 = 'No' then li_row_count0 ++
		if str_ex.dw1 = 'All' and str_ex.dw2 = 'Free' then li_row_count0 ++
		if str_ex.dw1 = 'All' and str_ex.dw2 = 'Grid' and dw_2.rowcount( ) <  1  then li_row_count0 ++
		if str_ex.dw1 = 'Check' and dw_1.object.row_sel[li_row_count1] =  1  and str_ex.dw2 = 'No' then li_row_count0 ++
		if str_ex.dw1 = 'Check' and dw_1.object.row_sel[li_row_count1] =  1  and str_ex.dw2 = 'Free' then li_row_count0 ++
		if str_ex.dw1 = 'Check' and dw_1.object.row_sel[li_row_count1] =  1  and str_ex.dw2 = 'Grid' and dw_2.rowcount( ) <  1  then li_row_count0 ++

		li_row_count1 ++
	loop


Ole_XLS.visible = true
Ole_XLS.disconnectobject( )
DESTROY Ole_XLS

Прошу не упрекать, мне еще много что не понятно в РВ, это мой только 2-й проект (первый естественно комом), только начал понимать плюсы ООП. (Раньше сидел на Access)

Так вот вопрос: что не так в скрипте или как сделать все правильно?
...
Рейтинг: 0 / 0
05.11.2004, 19:13
    #32771439
Филипп
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DW column
Опять за рыбу деньги продаём.
В ЭТОМ обсуждении вам было неоднократно объяснено - НЕ НУЖНО использовать связку SetColumn(..)/GetText(..) для доставания данных из колонок.
И столь же неоднократно объяснено, как это нужно делать...
...
Рейтинг: 0 / 0
05.11.2004, 19:16
    #32771442
Филипп
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DW column
В смысле в ЭТОМ
...
Рейтинг: 0 / 0
05.11.2004, 19:21
    #32771450
Филипп
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DW column
Теперь безотносительно того как вы данные достаете.
У вас все циклы написаны на RowCount()
Код: plaintext
do while li_row_count1 <= dw_1.rowcount( )
Ни в одном из ваших циклов вы не удаляете рядов из DW, то бишь RowCount() - постоянен.
Это как бы плохой стиль (несмотря на системный вызов) - зачем переопределять сколько рядов в каждой итерации цикла, если известно, что их количество не меняется...
...
Рейтинг: 0 / 0
09.11.2004, 09:32
    #32772825
DIGITALPRO
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DW column
ФИЛИПП

Все! от GetText() отказался заменил на
примерно так:
Код: plaintext
Ole_XLS.WorkBooks( 1 ).ActiveSheet.Cells(li_row_count,li_cln).Value = string( dw_1.Object.Data[li_row_count,li_Cln] )
только не помимаю для чего, зачем такой длинный код, если есть уже готовая функция GetText(), и если уж все такие противники данной функции то тогда где ее можно использовать?


По поводу RowCount(): не понимаю как можно обойтись без цикла
Код: plaintext
do while li_row_count1 <= dw_1.rowcount( )
Данный код используется в форме которая потом наследуются, в каждой наследуемой форме разные DW, следовательно я не могу знать сколько колонок будет.
...
Рейтинг: 0 / 0
09.11.2004, 10:07
    #32772884
DIGITALPRO
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DW column
наконец то я созрел!

Код: plaintext
1.
2.
3.
4.
5.
Int i
for i =  1  to long(dw_1.object.DataWindow.column.count)
...
... = string( dw_1.Object.Data[dw_1.getrow( ) ,i ] )
...
next

Всем СПАСИБО!
...
Рейтинг: 0 / 0
09.11.2004, 10:34
    #32772934
Ikar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DW column
ФилиппТеперь безотносительно того как вы данные достаете.
У вас все циклы написаны на RowCount()
Код: plaintext
do while li_row_count1 <= dw_1.rowcount( )
Ни в одном из ваших циклов вы не удаляете рядов из DW, то бишь RowCount() - постоянен.
Это как бы плохой стиль (несмотря на системный вызов) - зачем переопределять сколько рядов в каждой итерации цикла, если известно, что их количество не меняется...
Без цикла обходиться не надо. ИМХО, Филипп имел ввиду, что хорошим стилем будет всетаки так:
Код: plaintext
1.
2.
3.
4.
Long ll_Count
ll_Count = dw_1.rowcount( )
// или ll_Count = long(dw_1.object.DataWindow.column.count)
for i =  1  to ll_Count
...
Т.к. если RowCount() постоянен, то достаточно получить его один раз, а не дергать на каждом проходе цикла.
---
С уважением, IKAR

ikarhomecenter@narod.ru
IkarHomeCenter
...
Рейтинг: 0 / 0
09.11.2004, 11:04
    #32773009
DIGITALPRO
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DW column
Я и это уже тоже понял ^))
СПАСИБО.

P.S. Ивините за тугодумство!
...
Рейтинг: 0 / 0
16.11.2004, 10:04
    #32783543
DIGITALPRO
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DW column
Тугодумство вернулось ;))

Код: plaintext
li_x = Describe ( "column.x" )
Это конечно здорово, НО теперь не знаю как определить какая колонка идет по счету. Может кто подскажет.

P.S. Северный я человек, холодно здесь.
===============================
PB 9.0.1 (7236) ASA 9.0.0 (1312)
...
Рейтинг: 0 / 0
16.11.2004, 10:07
    #32783550
ЗоринАндрей
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DW column
Ятебе уже писали
li_x = Describe ( "column.x" )
Потом сортировка
...
Рейтинг: 0 / 0
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / DW column / 25 сообщений из 37, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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