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

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

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

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

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


Ну и очевидно, что этот ответ надо просто игнорировать :-)
...
Рейтинг: 0 / 0
DW column
    #32769784
Guest_2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторli_x = Describe ( "column.x" )
это не №, а координата!
Я понимаю, что теперь можно вычислить, но это неудобно
А Вы не стесняйтесь - вычисляйте. Вы же разработчик, а не девица на выданье.
...
Рейтинг: 0 / 0
DW column
    #32769863
DIGITALPRO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ОК.
Имеется форма, в ней 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
DW column
    #32771439
Фотография Филипп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Опять за рыбу деньги продаём.
В ЭТОМ обсуждении вам было неоднократно объяснено - НЕ НУЖНО использовать связку SetColumn(..)/GetText(..) для доставания данных из колонок.
И столь же неоднократно объяснено, как это нужно делать...
...
Рейтинг: 0 / 0
DW column
    #32771442
Фотография Филипп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В смысле в ЭТОМ
...
Рейтинг: 0 / 0
DW column
    #32771450
Фотография Филипп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Теперь безотносительно того как вы данные достаете.
У вас все циклы написаны на RowCount()
Код: plaintext
do while li_row_count1 <= dw_1.rowcount( )
Ни в одном из ваших циклов вы не удаляете рядов из DW, то бишь RowCount() - постоянен.
Это как бы плохой стиль (несмотря на системный вызов) - зачем переопределять сколько рядов в каждой итерации цикла, если известно, что их количество не меняется...
...
Рейтинг: 0 / 0
DW column
    #32772825
DIGITALPRO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ФИЛИПП

Все! от 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
DW column
    #32772884
DIGITALPRO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
наконец то я созрел!

Код: 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
DW column
    #32772934
Фотография Ikar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ФилиппТеперь безотносительно того как вы данные достаете.
У вас все циклы написаны на 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
DW column
    #32773009
DIGITALPRO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я и это уже тоже понял ^))
СПАСИБО.

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

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

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


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