2

我正在使用 PowerBuilder classic 12.5,在插入、编辑、创建和打印报告时遇到了困难。

我有一个dw_NewEmployee带有数据对象的数据窗口,d_newrecord它是可更新的。

  1. 我应该使用列通过列插入记录还是在窗口对象上创建单行文本
  2. itemchanged在数据对象或单行文本的列和行上使用的事件...我无法弄清楚如何实现验证规则。请给我一个例子来验证员工ID_Number
4

1 回答 1

4

我看到您似乎对数据窗口的使用感到困惑。

我们试着总结一下:

  1. 您基于数据库中的 sql 选择创建一个新的数据窗口 (比如说它是一个网格),比如说。d_newrecordselect id_number, name from employee
  2. 在数据窗口的详细信息区域(将在运行时为每条记录重复,但在设计中只重复一次),您需要为每一列放置一个列对象(在这里您将拥有id_numbername)这些对象都用于显示现有数据并接收用户输入以编辑数据和插入新记录。
  3. 如果您需要使 dw 可更新,请不要忘记设置 Rows / Update 属性。
  4. 在数据窗口的标题区域中,您可以将静态文本与每一列相关联,该文本只是在这里显示列名,它与表数据无关。
  5. 在某些窗口对象中,您放置一个数据窗口控件 dw_newemployee,其中将绘制数据窗口的内容,您将其设置d_newrecord为它的数据对象
  6. 您需要在某些时候设置 dw 的事务对象,例如在open()窗口事件中:
dw_newemployee.SetTransObject(sqlca)
dw_newemployee.Retreive() //if you are using some retreival arguments, don't forget to include them here

当您想在表中插入新数据时(例如使用窗口按钮“添加”),clicked()如果您调用的按钮dw_newemployee.InsertRow(0)在末尾插入。

ItemChanged()事件将在一个单元格被修改后触发,您将获得行、项目(一个 dwobject)和新数据。通过选择事件的返回值,您可以接受或拒绝新数据。

以下是itemchanged()事件中的字段验证示例:

long ll_return_code = 0
string ls_column
ls_column = lower(dwo.name)
choose case ls_column
    case "id_number"
        if long(data) = 42 THEN
            messagebox("validation error", "You cannot use 42 for the ID")
            ll_return_code = 1 //reject and stay in cell
        end if
    case "name"
        if data = "foobar" then 
            messagebox("validation error", "Do not use dummy value...")
            ll_return_code = 2 //reject but allow to go elsewhere
        end if
end choose

return ll_return_code
于 2012-08-10T11:25:33.913 回答