一、问题的提出
在进行PowerBuilder应用系统开发过程中,对于某些数据录入窗口,我们希望将某列置为不可编辑的,防止用户由于操作不慎而删掉数据。下面介绍如何实现这一功能。在PowerBuilder的DataWindow里,如果设定Grid风格,那么这个DataWindows就具有这样一个特点:当用鼠标点列名后,即可选中整列(该列反显成黑色)。这就为我们解决问题提供了一些思路:用鼠标点中某列,使该列变成不可编辑。
二、解决办法
本文介绍以PowerBuilder 5.0为开发工具的三种方法,每种方法都各有其优缺点。
方法一:
在DataWindow中,列与列之间用Tab键进行移动时,是依据DataWindow为每一列设置的Tb 值来进行移动的。当某列的Tab值为0时,此列不可编辑,使用户无法对其进行增、删、改等操作。故可将某列的Tab值置为0,即可让此列设为不可编辑。方法如下(设columnname为DataWindow中要置成的不可编辑的列名):
dw_1.setorder("columnname",0)
或者在数据窗口的script中用以下语句进行修改:
dw_1.modify(:columnname.tabsequence=0")
或dw_1.modify("#"+string(number)+".tabsequence=0")
该方法的优点是易于实现,缺点是不允许列进行移动。即在Grid风格的DataWindow中,必须不选中column moving,否则按下tab键时会引起顺序混乱。
方法二:
可查看列属性中的edit属性,查看style风格。若要将某列置不可编辑,可在该列的edi style="edit"中选中display only;或者在窗口的script中用以下语句进行修改:
dw+1.modify("columnname.edit. displayonly=Yes)
或dw_1.modify("#"+string(number)+".edit.displayonly=Yes")
若将该列改回可编辑,可在该列的edit style="edit"中,不选中display only;或者在窗口的script中用以下语句进行修改:
dw_1.modify("columnname.edit.displayonly=No")该方法也很简单,但同样不允许列移动。
方法三:
用DataWindow的clicked事件中的方法也可以实现列的保护。若某列不可更改,则可置r otect=0。即:
dw_1.modify("columnname.protect=0")
或dw_1.modify("#"+string(number)+".protect=0")
若要将该列改为可更改,则置protect=1,即:
dw_1.modify(:columnname.protect=1")
或dw_1.modify("#"+string(number)+".protect=1")
此方法不影响Tab键的移动,用户可以随意拉动列,还可在应用过程中自己决定哪一列可编辑,哪一列不可编辑。
在进行PowerBuilder应用系统开发过程中,对于某些数据录入窗口,我们希望将某列置为不可编辑的,防止用户由于操作不慎而删掉数据。下面介绍如何实现这一功能。在PowerBuilder的DataWindow里,如果设定Grid风格,那么这个DataWindows就具有这样一个特点:当用鼠标点列名后,即可选中整列(该列反显成黑色)。这就为我们解决问题提供了一些思路:用鼠标点中某列,使该列变成不可编辑。
二、解决办法
本文介绍以PowerBuilder 5.0为开发工具的三种方法,每种方法都各有其优缺点。
方法一:
在DataWindow中,列与列之间用Tab键进行移动时,是依据DataWindow为每一列设置的Tb 值来进行移动的。当某列的Tab值为0时,此列不可编辑,使用户无法对其进行增、删、改等操作。故可将某列的Tab值置为0,即可让此列设为不可编辑。方法如下(设columnname为DataWindow中要置成的不可编辑的列名):
dw_1.setorder("columnname",0)
或者在数据窗口的script中用以下语句进行修改:
dw_1.modify(:columnname.tabsequence=0")
或dw_1.modify("#"+string(number)+".tabsequence=0")
该方法的优点是易于实现,缺点是不允许列进行移动。即在Grid风格的DataWindow中,必须不选中column moving,否则按下tab键时会引起顺序混乱。
方法二:
可查看列属性中的edit属性,查看style风格。若要将某列置不可编辑,可在该列的edi style="edit"中选中display only;或者在窗口的script中用以下语句进行修改:
dw+1.modify("columnname.edit. displayonly=Yes)
或dw_1.modify("#"+string(number)+".edit.displayonly=Yes")
若将该列改回可编辑,可在该列的edit style="edit"中,不选中display only;或者在窗口的script中用以下语句进行修改:
dw_1.modify("columnname.edit.displayonly=No")该方法也很简单,但同样不允许列移动。
方法三:
用DataWindow的clicked事件中的方法也可以实现列的保护。若某列不可更改,则可置r otect=0。即:
dw_1.modify("columnname.protect=0")
或dw_1.modify("#"+string(number)+".protect=0")
若要将该列改为可更改,则置protect=1,即:
dw_1.modify(:columnname.protect=1")
或dw_1.modify("#"+string(number)+".protect=1")
此方法不影响Tab键的移动,用户可以随意拉动列,还可在应用过程中自己决定哪一列可编辑,哪一列不可编辑。