如何编码itemchanged事件和数据窗口

时间:2012-08-10 09:26:37

标签: events powerbuilder datawindow

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

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

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

1 个答案:

答案 0 :(得分:4)

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

让我们试着总结一下:

  1. 您根据数据库中的sql select创建了一个新的数据窗口 d_newrecord(比如它是一个网格),比如select id_number, name from employee
  2. 在数据窗口的 detail 区域(将在运行时为每条记录重复但在设计中只有一次),您需要为每列放置一个列对象(在这里您将拥有id_numbername)这些对象既可以显示现有数据,也可以接收用户输入以编辑数据和插入新记录。
  3. 如果需要使dw可更新,请不要忘记设置Rows / Update属性。
  4. 在数据窗口的标题区域中,您可以将一个静态文本与每个列相关联,这些列就是在这里显示列名,它与表数据无关。
  5. 在某个窗口对象中,您放置了一个数据窗口控件 dw_newemployee,其中将绘制数据窗口的内容,您将d_newrecord设置为 dataobject
  6. 您需要在某个时刻设置dw的事务对象,例如在窗口的open()事件中:
  7. 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)以插入结尾。< / p>

    在修改一个单元格后将触发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