Динамическая Таблица

  • Автор темы Anonimous
  • Дата начала
A

Anonimous

#1
Привет, еще вопросик.
Имеется формочка, она отображается в dialogbox. На этой формочке кнопка. Пользователь на нее нажимает, появляется окно с вьюхой, из которой выбирается значение. Пользователь может выбрать сколько угодно значений. Все эти значения надо вносить в таблицу на формочке, которую отображаем в Dialogbox. В данный момент таблица на формочке статическая, в ней ограниченное число строк, которые появляются по мере добавления значений. Посоветуйте, пожалуйста, как бы лучше сделать динамическую таблицу.
Заранее спасибо
 

NickProstoNick

Статус как статус :)
Lotus team
22.08.2008
1 809
21
#2
стандартными средствами динамически ну никак... хотя может как-то через java, но я не знаю как
 

Kizarek86

Lotus team
20.07.2007
864
4
#3
Многозначные поля я использую если значений не шибко много.
Также можно использовать "дополнительные документы", которые будет отображаться во внедренном представлении и будут завязаны на нужном документе по ключу.
 
A

Anonimous

#6
Я NotesRichTextTable пытаюсь использовать, затем добавлять в нее строки методом AppendTable. Только проблема такая, что чтоб эта таблица отобразилась, документ надо обязательно сохранить, что не очень удобно. Я пытаюсь воспользоваться переоткрытием документа. Т.е. пользователь выбрал значения, затем документ, в котором создается таблица, закрылся, потом создается документ по той же форме, но значения его полей заменяются на те, который имел закрытый документ. Т.е. вот код кнопки на форме в диалогбоксе. Пользователь ее кликнет, появится вьюха, из которой пользователь выберет значения, потом эти значения должны отобразиться в динамической таблице на форме из диалогбокса

Sub Click(Source As Button)
Dim session As New NotesSession
Dim db As NotesDatabase
Dim ws As New NotesUIWorkspace
Set db = session.CurrentDatabase

Dim doc As New NotesDocument(db)
Call doc.AppendItemValue("Form", "WorksRegistration1")

Dim rti As New NotesRichTextItem(doc, "Body")
Call rti.AppendText("Paragraph of text")
Call rti.AddNewLine(2)

Dim rows As Integer, columns As Integer
rows = 2
columns = 9
Dim tabs() As String

Call rti.AppendTable(rows, columns)

// потом присоединяем столько-то строк, в зависимости от того, сколько выбрали во вьюхе, потом

ws.CurrentDocument.Close

Dim docInputWorks As NotesDocument
Set docInputWorks = ws.CurrentDatabase.Database.CreateDocument
With docInputWorks
.ReplaceItemValue "Form", "WorksRegistration1"
// замена значений полей документа docInputWorks на те, что имеет doc
Dim rti1 As New NotesRichTextItem(docInputWorks, "Body")
rt1=rt
End With

ws.EditDocument False, docInputWorks
End Sub

Документ переоткрывается, но таблица не отображается без Call doc.Save(True, False)

Как это обойти, чтоб таблица отобразилась без сохранения?
 

ToxaRat

Чёрный маг
Lotus team
06.11.2007
3 233
18
#8
Я NotesRichTextTable пытаюсь использовать, затем добавлять в нее строки методом AppendTable. Только проблема такая, что чтоб эта таблица отобразилась, документ надо обязательно сохранить, что не очень удобно. Я пытаюсь воспользоваться переоткрытием документа. Т.е. пользователь выбрал значения, затем документ, в котором создается таблица, закрылся, потом создается документ по той же форме, но значения его полей заменяются на те, который имел закрытый документ. Т.е. вот код кнопки на форме в диалогбоксе. Пользователь ее кликнет, появится вьюха, из которой пользователь выберет значения, потом эти значения должны отобразиться в динамической таблице на форме из диалогбокса
если данные хранить не в таблице то достаточно и компютедРТ
тогда при открытии формироваться РТ и будет достаточно
 
A

Anonimous

#9
Спасибо, понял, получилось.
Но столкнулся с другой проблемкой.
RT Поле Body лежит на форме. Когда форму открываю, в ее событии QueryOpen я в это поле добавляю таблицу, навигатором рисую ей шапку. Все отлично, обновляю - и форма открывается с нарисованной шапкой таблицы в поле Body. Дальше надо нажимать на кнопку, отобразить окошко с вьюхой, из которой надо выбрать значение и вставить в таблицу.
В коде кнопки пишу:

Dim rti As NotesRichTextItem
Set rti = doc.GetFirstItem("Body")
Dim rtnav As NotesRichTextNavigator
Set rtnav = rti.CreateNavigator

If Not rtnav.FindFirstElement(RTELEM_TYPE_TABLE) Then
Messagebox "Could not find table",, "Fatal error"
Exit Sub
End If
Dim rtt As NotesRichTextTable
Set rtt = rtnav.GetFirstElement(RTELEM_TYPE_TABLE)

Все просто, так и в Хелпе пишут, да вот rtnav.FindFirstElement(RTELEM_TYPE_TABLE) таблицу в Boby не находит. Таблица добавлялась в событии QueryOpen. Никто с таким не сталкивался?
 
A

Anonimous

#11
А форма-то в Dialogbox отображается. Как-нибудь ее можно переоткрыть в таком случае?
Попытался решить эту проблему так: юзер открывает форму с пустой динамической таблицей, жмет на кнопку "Добавить", выбирает значения из вьюхи. Жмет ОК. И из кода кнопки "Добавить" идет вызов еще одного диалогбокса, в котором в таблице формы выбранные значения без проблем отображаются. Ну т.е. после выбора значений на кнопке срабатывает код
Dim docInputWorks As NotesDocument
Set docInputWorks = ws.CurrentDatabase.Database.CreateDocument
With docInputWorks
.ReplaceItemValue "Form", "WorksRegistration1" // WorksRegistration1 - имя формы документа, в котором таблица
.ReplaceItemValue "FromRequest", 0
Dim rtitemBody1 As New NotesRichTextItem(docInputWorks, "Body")

Set rtitemBody1 = docInputWorks.GetFirstItem("Body")
Call rtitemBody1.AppendTable(1, 9) //шапка таблицы
// шапку заполним
Dim rtnavBody1 As NotesRichTextNavigator
Dim rtTable1 As NotesRichTextTable
Set rtnavBody1 = rtitemBody1.CreateNavigator
Set rtTable1 = rtnavBody1.GetFirstElement(RTELEM_TYPE_TABLE)
rtTable1.AddRow collServices.Count //добавляем столько строк, сколько юзер выбрал значений
//и сами значения в ячейки записываем
rtitemBody1.Update
End With

Только плохо, что под новым диалогбоксом прежний диалогбокс не получается закрыть. Возможно как-нибудь это сделать?
 

NickProstoNick

Статус как статус :)
Lotus team
22.08.2008
1 809
21
#12
1. Таблицы динамически не рисуются
2. Окно диалога не масштабируется... ни мышью ни от содержимого
3. Переоткрыть диалог нельзя
4. Не нужно вставлять RT-поле в таблицу. Потом работать с содержимым поля сложно. Особенно если в содержимом будут таблицы. Ты ее просто не найдешь. Собственно это
Все просто, так и в Хелпе пишут, да вот rtnav.FindFirstElement(RTELEM_TYPE_TABLE) таблицу в Boby не находит.
именно по причине того, что RT-поле у тебя в таблице.

- либо заведомо рисуй таблицу большого размера для диалога в дизайнере. а потом в зависимости от содержимого - показывай нужные строки
- либо решай через встроенный вид и документы-респонсы, а при закрытии диалога переноси данные в таблицу в основной док.

Но ПОМНИ - ТАБЛИЦЫ ДИНАМИЧЕСКИ НЕ РИСУЮТСЯ! ПРИДЕТСЯ ПЕРЕОТКРЫВАТЬ ДОКУМЕНТ

А вообще - пользуйся поиском на форуме. тут ОЧЕНЬ много тем по RT-полям
 

ToxaRat

Чёрный маг
Lotus team
06.11.2007
3 233
18
#13
3. Переоткрыть диалог нельзя
чего вы за фигню гоните?

из вас что никто для диалог-бокса никогда не рисовал свои кнопки ОК - Отмена

При срабатывании кода - ЗАКРЫВАТЬ диалог-бокс и открывать заново

подсказко - диалог-бокс закрывается как и обычный документ
 
A

Anonimous

#14
При срабатывании кода - ЗАКРЫВАТЬ диалог-бокс и открывать заново
Подскажите, плиз, как это сделать. Не через UI точно, так не переоткрывает
Кнопка на диалогбоксе
Sub Click(Source As Button)
Dim session As New NotesSession
Dim db As NotesDatabase
Dim ws As New NotesUIWorkspace
Set db = session.CurrentDatabase
Dim doc As NotesDocument
Set doc=ws.CurrentDocument.Document

//вызов вьюхи для выбора значений

//диалог-бокс так закрыть не получилось д последующего переоткрытия

ws.ReloadWindow
ws.CurrentDocument.Close True

//вот и делаю второй диалог, тольо первый, зараза, под ним не закрывается

Dim docInputWorks As NotesDocument
Set docInputWorks = ws.CurrentDatabase.Database.CreateDocument
With docInputWorks
.ReplaceItemValue "Form", "WorksRegistration1"
.ReplaceItemValue "FromRequest", 0
Dim rtitemBody1 As New NotesRichTextItem(docInputWorks, "Body")

Set rtitemBody1 = docInputWorks.GetFirstItem("Body")
'rt1=rt
Call rtitemBody1.AppendTable(1, 9)
' Set rtitemBody = docCur.GetFirstItem("Body")
rtitemBody1.Update
Dim rtnavBody1 As NotesRichTextNavigator
Dim rtTable1 As NotesRichTextTable
Set rtnavBody1 = rtitemBody1.CreateNavigator
Set rtTable1 = rtnavBody1.GetFirstElement(RTELEM_TYPE_TABLE)
rtTable1.AddRow collServices.Count
rtitemBody1.Update
End With

ws.DialogBox "WorksRegistration1" , True , True , False , , , , "Введите выполненные работы", docInputWorks, True,
 

doka

Well-known member
18.02.2010
118
0
#15
Динамические встроенные представления создаются через апплеты - 100%(имхо, стопудова, зуб даю и т.п. и т.д.).
Разберись в них, результат тебя самого порадует! А NotesRichTextTable это проще, но это компромис с совестью)


P.S.
Знал бы как тут скрин вставить, показал бы как красиво это выглядит)