Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / FoxPro, Visual FoxPro Новый топик    Ответить
 Grid.  [new]
Недоходящий
Member

Откуда:
Сообщений: 912
Как программно в грид, в колонку, добовлять едитбокс?
14 ноя 05, 18:52    [2067421]     Ответить | Цитировать Сообщить модератору
 Re: Grid.  [new]
AleksMed
Member

Откуда: Россия, Серпухов-Москва
Сообщений: 1546
MyGrid.Column1.AddObject("Edit1","Editbox")
15 ноя 05, 09:43    [2068510]     Ответить | Цитировать Сообщить модератору
 Re: Grid.  [new]
ВладимирМ
Member

Откуда: г. Москва
Сообщений: 7864
Для справки.

Объекты, добавленные при помощи метода AddObject() по умолчанию имеют свойство Visible = .F. Для того, чтобы они отобразились, необходимо явно сделать их видимыми

MyGrid.Column1.Edit1.Visible = .T.
15 ноя 05, 10:12    [2068685]     Ответить | Цитировать Сообщить модератору
 Re: Grid.  [new]
Недоходящий
Member

Откуда:
Сообщений: 912
Ага, понятно.
И еще такой вопросик. В грид загнал значения. Как програмно прописать автовыравнивание столбцов по записям?
15 ноя 05, 10:32    [2068812]     Ответить | Цитировать Сообщить модератору
 Re: Grid.  [new]
Jose
Member

Откуда:
Сообщений: 67
myGrid.Autofit()
15 ноя 05, 14:20    [2070336]     Ответить | Цитировать Сообщить модератору
 Re: Grid.  [new]
Недоходящий
Member

Откуда:
Сообщений: 912
myGrid.Autofit() - непашет
Наверное потому что у меня 6. для 6 как-то можно зделать автовыравнивание?
15 ноя 05, 16:55    [2071288]     Ответить | Цитировать Сообщить модератору
 Re: Grid.  [new]
Недоходящий
Member

Откуда:
Сообщений: 912
проблема такова: в грид заношу значения с таблы в которой ширина поля = 100. соответственно в гриде колонка принимает такую же ширину хотя значения занимают максимум 25 символов. Как мне осуществить автовыравнивание? ведь значения могут меняться.
15 ноя 05, 17:25    [2071416]     Ответить | Цитировать Сообщить модератору
 Re: Grid.  [new]
ВладимирМ
Member

Откуда: г. Москва
Сообщений: 7864
Почитай описание функций

FontMetric(6) - ширина в пикселах среднего символа указанного шрифта
TXTWidth() - длина текста в средних символах указаного шрифта

Произведение одного на другое даст длину текста в пикселах. Далее надо добавить несколько пикселей на рамку (BorderWidth) и отступы (Margin).

Ну и наконец просто установить

Grid.Column1.Width = ...

Найти самое широкое значение в таблице можно как-то так

SELECT MAX(txtWidth(RTRIM(MyField))) as maxLen FROM MyTable

Надеюсь, общая идея понятна...
15 ноя 05, 17:45    [2071516]     Ответить | Цитировать Сообщить модератору
 Re: Grid.  [new]
Недоходящий
Member

Откуда:
Сообщений: 912
идея понятна. но теперь попробывать ее внедрить. Дело в том что после создание курсора из той таблы которую я упоминал, я вызываю ворму где в гриде ниче не установлено. Подскажите, где мне прописывать код?
15 ноя 05, 17:54    [2071563]     Ответить | Цитировать Сообщить модератору
 Re: Grid.  [new]
Jose
Member

Откуда:
Сообщений: 67
Дык прям в Init'e и пиши
15 ноя 05, 18:07    [2071637]     Ответить | Цитировать Сообщить модератору
 Re: Grid.  [new]
Недоходящий
Member

Откуда:
Сообщений: 912
пишу, но вот SELECT MAX(txtWidth(RTRIM(MyField))) as maxLen FROM MyTable
подставляю свои имена а она ругоеться что типа неправильный аргумент. Что делать?
15 ноя 05, 18:09    [2071643]     Ответить | Цитировать Сообщить модератору
 Re: Grid.  [new]
Недоходящий
Member

Откуда:
Сообщений: 912
ругаеться потому что поле числовое
15 ноя 05, 18:10    [2071649]     Ответить | Цитировать Сообщить модератору
 Re: Grid.  [new]
Недоходящий
Member

Откуда:
Сообщений: 912
Блин задаеться сразу куча вопросов. как программно быстро определить какой тип поля в таблице,т.е. символьный или числовой?
15 ноя 05, 18:12    [2071654]     Ответить | Цитировать Сообщить модератору
 Re: Grid.  [new]
ВладимирМ
Member

Откуда: г. Москва
Сообщений: 7864
Недоходящий
Блин задаеться сразу куча вопросов. как программно быстро определить какой тип поля в таблице,т.е. символьный или числовой?


AFIELDS()
?TYPE("MyTable.MyField")

Числа "прижимаются" к правому краю. Значит, ширина столбца должна быть равна макисмально возможному (в соответствии с размерностью поля) количеству символов в числовом поле. Иначе просто не будет видно части значения.

Даты вообще имеют фиксированную ширину.

Т.е. получается, что для всех типов данных, кроме символьных, ширина столбца будет зависеть не от содержимого поля, а от его размерности. Это можно определить через AFIELDS().

А вот у символьных полей придется искать максимально широкое значение, что, вообще-то, достаточно медленный процесс.
15 ноя 05, 18:39    [2071748]     Ответить | Цитировать Сообщить модератору
 Re: Grid.  [new]
Jose
Member

Откуда:
Сообщений: 67
Само значение поля тебе ведь никчему, достаточно лишь найти длину самого длинного значения в поле:
SELECT MAX(LEN(ALLTRIM(myfield))) FROM MyTab
16 ноя 05, 12:46    [2073912]     Ответить | Цитировать Сообщить модератору
 Re: Grid.  [new]
Недоходящий
Member

Откуда:
Сообщений: 912
Можно сказать и так. Но все выше изложенное тоже мне пригодилось.
Но уменя возникла проблема.
Есть поле в табле - С(200), в нем есть значение. Подобные: 'asd.234535,234234';'afwe.234235';'234345'. Когда ето все отображаеться в гриде, то столбец принимает ширину = ширене поля и все выравнено по правому краю, но когда я потом перевожу это все ексель. то результат странный. Происходит: ширина колонки в экселе = 200, значения которые имеют и буквы и цивры выравнены по левому краю, после них пробелы до конца строки, а где есть значения без букв, они выравниваються по правому краю и впереди гих ставяться пробелы до начала стоки. Как это объяснить и почему так?
16 ноя 05, 12:54    [2073963]     Ответить | Цитировать Сообщить модератору
 Re: Grid.  [new]
AleksMed
Member

Откуда: Россия, Серпухов-Москва
Сообщений: 1546
Недоходящий
Можно сказать и так. Но все выше изложенное тоже мне пригодилось.
Но уменя возникла проблема.
Есть поле в табле - С(200), в нем есть значение. Подобные: 'asd.234535,234234';'afwe.234235';'234345'. Когда ето все отображаеться в гриде, то столбец принимает ширину = ширене поля и все выравнено по правому краю, но когда я потом перевожу это все ексель. то результат странный. Происходит: ширина колонки в экселе = 200, значения которые имеют и буквы и цивры выравнены по левому краю, после них пробелы до конца строки, а где есть значения без букв, они выравниваються по правому краю и впереди гих ставяться пробелы до начала стоки. Как это объяснить и почему так?

Потому, что предварительно, перед переносом данных, нужно Экселю явно указать какой тип данных в каком столбце храниться.
16 ноя 05, 13:40    [2074314]     Ответить | Цитировать Сообщить модератору
 Re: Grid.  [new]
Недоходящий
Member

Откуда:
Сообщений: 912
Как это сделать? подскажите
16 ноя 05, 13:59    [2074474]     Ответить | Цитировать Сообщить модератору
 Re: Grid.  [new]
AleksMed
Member

Откуда: Россия, Серпухов-Москва
Сообщений: 1546
Недоходящий
Как это сделать? подскажите

Это кусок из кода по выгрузке содержимого Grida в Excel^
	=AFIELDS(laFields, "cExcel")   && Список полей источника в массив
	USE IN cExcel
	lnRowsCount = _TALLY
	loXls = CREATEOBJECT("Excel.Application")
	loWorkbook = loXls.Workbooks.Add()
	loWorkSheet = loWorkbook.Worksheets(1)
	loWorkSheet.Cells.Font.Name = ThisForm.grdRvfintotal.FontName 
	loWorkSheet.Cells.Font.Size = ThisForm.grdRvfintotal.FontSize
	FOR lnCnt = 1 TO lnColumnsCount
		loWorkSheet.Cells(1, lnCnt).Value = ThisForm.grdRvfintotal.Columns(lnCnt).Header1.Caption
		loWorkSheet.Cells(1, lnCnt).Font.Size = ThisForm.grdRvfintotal.Columns(lnCnt).Header1.FontSize
		loWorkSheet.Cells(1, lnCnt).Interior.Color  = ThisForm.grdRvfintotal.Columns(lnCnt).Header1.BackColor
		loWorkSheet.Cells(1, lnCnt).Font.Bold = ThisForm.grdRvfintotal.Columns(lnCnt).Header1.FontBold
		DO CASE 
			CASE laFields(lnCnt,2)="C"
				loWorkSheet.Columns(lnCnt).NumberFormat = "@"
			CASE laFields(lnCnt,2)="N"
				loWorkSheet.Columns(lnCnt).NumberFormat = "#,##0"
				IF laFields(lnCnt,4)>0
					loWorkSheet.Columns(lnCnt).NumberFormat = loWorkSheet.Columns(lnCnt).NumberFormat + "." + REPLICATE("0",laFields(lnCnt,4))
				ENDIF 
			CASE laFields(lnCnt,2)="D"
				loWorkSheet.Columns(lnCnt).NumberFormat = "dd.mm.yyyy"
		ENDCASE 
	NEXT lnCnt
16 ноя 05, 16:30    [2075553]     Ответить | Цитировать Сообщить модератору
 Re: Grid.  [new]
Jose
Member

Откуда:
Сообщений: 67
А вообще попробуй воспользоваться поиском. Тут про Ехель столько писали!!! Наверняка найдешь что-то интересное и полезное для себя. ))
16 ноя 05, 20:29    [2076384]     Ответить | Цитировать Сообщить модератору
 Re: Grid.  [new]
Jose
Member

Откуда:
Сообщений: 67
И вот еще:
Excel
16 ноя 05, 20:32    [2076389]     Ответить | Цитировать Сообщить модератору
 Re: Grid.  [new]
Недоходящий
Member

Откуда:
Сообщений: 912
Спаси бо Вам всем очень помогло.
17 ноя 05, 17:41    [2080426]     Ответить | Цитировать Сообщить модератору
Все форумы / FoxPro, Visual FoxPro Ответить