📄 intraweb开发指南.htm
字号:
<P><SPAN style="FONT-FAMILY: 宋体; Times: ">平时我们在使用</SPAN><SPAN
lang=EN-US>TDBGrid</SPAN><SPAN
style="FONT-FAMILY: 宋体; Times: ">的时候,选中某一条记录的时候会将数据集的游标定位到相应的记录上,同样的我们也想在</SPAN><SPAN
lang=EN-US>TIWDBGrid</SPAN><SPAN
style="FONT-FAMILY: 宋体; Times: ">上实现这一功能,这需要设定</SPAN><SPAN
lang=EN-US>IWDBGrid</SPAN><SPAN
style="FONT-FAMILY: 宋体; Times: ">的</SPAN><SPAN
lang=EN-US>Column</SPAN><SPAN
style="FONT-FAMILY: 宋体; Times: ">对象的</SPAN><SPAN
lang=EN-US>LinkField</SPAN><SPAN
style="FONT-FAMILY: 宋体; Times: ">属性。</SPAN></P>
<P><SPAN lang=EN-US><IMG height=132
src="IntraWeb开发指南.files/web014.jpg" width=115
v:shapes="_x0000_i1031"> <IMG height=262
src="IntraWeb开发指南.files/web016.jpg" width=197
v:shapes="_x0000_i1032"> <IMG height=242
src="IntraWeb开发指南.files/image018.jpg" width=181
v:shapes="_x0000_i1033"> </SPAN></P>
<P><SPAN style="FONT-FAMILY: 宋体; Times: ">比如在图中我们给</SPAN><SPAN
lang=EN-US>ChnName</SPAN><SPAN
style="FONT-FAMILY: 宋体; Times: ">字段设定了</SPAN><SPAN
lang=EN-US>LinkField</SPAN><SPAN
style="FONT-FAMILY: 宋体; Times: ">为</SPAN><SPAN
lang=EN-US>CorpID</SPAN><SPAN
style="FONT-FAMILY: 宋体; Times: ">键值字段,</SPAN><SPAN
lang=EN-US>LinkField</SPAN><SPAN
style="FONT-FAMILY: 宋体; Times: ">可以将绑定的字段的当前值传给</SPAN><SPAN
lang=EN-US>OnClick</SPAN><SPAN
style="FONT-FAMILY: 宋体; Times: ">事件,可以用来定位数据集的游标,</SPAN><SPAN
lang=EN-US>OnClick</SPAN><SPAN
style="FONT-FAMILY: 宋体; Times: ">事件的实现代码如下:</SPAN></P>
<P><SPAN lang=EN-US>procedure
TformCorpList.iwgCorpColumns1Click(ASender: TObject;</SPAN></P>
<P><SPAN lang=EN-US> const AValue: String);</SPAN></P>
<P><SPAN lang=EN-US>var</SPAN></P>
<P><SPAN lang=EN-US> Id:Integer;</SPAN></P>
<P><SPAN lang=EN-US>begin</SPAN></P>
<P><SPAN lang=EN-US> inherited;</SPAN></P>
<P><SPAN lang=EN-US> //</SPAN><SPAN
style="FONT-FAMILY: 宋体; Times: ">获得</SPAN><SPAN
lang=EN-US>CorpID</SPAN><SPAN
style="FONT-FAMILY: 宋体; Times: ">值,使用</SPAN><SPAN
lang=EN-US>Locate</SPAN><SPAN
style="FONT-FAMILY: 宋体; Times: ">定位值</SPAN></P>
<P><SPAN lang=EN-US> Id:=StrToInt(AValue);</SPAN></P>
<P><SPAN lang=EN-US>
dmHR.badoCorp.Locate('CorpId',Id,[]);</SPAN></P>
<P><SPAN lang=EN-US>end;</SPAN></P>
<P><SPAN
style="FONT-FAMILY: 宋体; Times: ">运行后,从前面的图中我们可以看到在清华同方公司的下面有一个下滑线,点击超连接就会调用</SPAN><SPAN
lang=EN-US>OnClick</SPAN><SPAN
style="FONT-FAMILY: 宋体; Times: ">事件,将数据集游标更新为被点记录,同时更新界面下边的公司中文信息和英文信息。</SPAN></P>
<P><B><SPAN style="FONT-FAMILY: 宋体; Times: ">信息编辑</SPAN></B></P>
<P><SPAN
style="FONT-FAMILY: 宋体; Times: ">完成记录浏览功能,我们需要实现对公司信息编辑的功能。其中增加和修改公司记录用一个界面来完成,为了识别操作性质的不同,我们为编辑界面增加了一个</SPAN><SPAN
lang=EN-US>EditMode</SPAN><SPAN
style="FONT-FAMILY: 宋体; Times: ">属性,它是枚举类型的,当修改时设为</SPAN><SPAN
lang=EN-US>emEdit, </SPAN><SPAN
style="FONT-FAMILY: 宋体; Times: ">当添加时设为</SPAN><SPAN
lang=EN-US>emInsert</SPAN><SPAN
style="FONT-FAMILY: 宋体; Times: ">。下面是代码实现:</SPAN></P>
<P><SPAN lang=EN-US>//</SPAN><SPAN
style="FONT-FAMILY: 宋体; Times: ">修改公司信息</SPAN></P>
<P><SPAN lang=EN-US>procedure TformCorpList.iwnCorpEdit(Sender:
TObject);</SPAN></P>
<P><SPAN lang=EN-US>begin</SPAN></P>
<P><SPAN lang=EN-US> //inherited;//</SPAN><SPAN
style="FONT-FAMILY: 宋体; Times: ">注意这里不要调用</SPAN><SPAN
lang=EN-US>TIWDBNavigator</SPAN><SPAN
style="FONT-FAMILY: 宋体; Times: ">默认的方法</SPAN></P>
<P><SPAN lang=EN-US> FEditForm.EditMode:=emEdit;</SPAN></P>
<P><SPAN lang=EN-US>
FEditForm.CorpId:=dmhr.badoCorp.FieldByName('CorpId').AsInteger;//</SPAN><SPAN
style="FONT-FAMILY: 宋体; Times: ">传递键值进去</SPAN></P>
<P><SPAN lang=EN-US> // </SPAN><SPAN
style="FONT-FAMILY: 宋体; Times: ">显示编辑窗体</SPAN></P>
<P><SPAN lang=EN-US> FEditForm.Show;</SPAN></P>
<P><SPAN lang=EN-US>end;</SPAN></P>
<P><SPAN lang=EN-US>//</SPAN><SPAN
style="FONT-FAMILY: 宋体; Times: ">添加公司信息</SPAN></P>
<P><SPAN lang=EN-US>procedure TformCorpList.iwnCorpInsert(Sender:
TObject);</SPAN></P>
<P><SPAN lang=EN-US>begin</SPAN></P>
<P><SPAN lang=EN-US> //inherited;</SPAN></P>
<P><SPAN lang=EN-US> FEditForm.EditMode:=emInsert;</SPAN></P>
<P><SPAN lang=EN-US> // </SPAN><SPAN
style="FONT-FAMILY: 宋体; Times: ">显示编辑窗体</SPAN></P>
<P><SPAN lang=EN-US> FEditForm.Show;</SPAN></P>
<P><SPAN lang=EN-US>end;</SPAN></P>
<P><SPAN
style="FONT-FAMILY: 宋体; Times: ">对于删除的实现需要一些特殊处理,这里我们不能使用</SPAN><SPAN
lang=EN-US>TIWDBNavigator</SPAN><SPAN
style="FONT-FAMILY: 宋体; Times: ">默认的</SPAN><SPAN
lang=EN-US>Delete</SPAN><SPAN
style="FONT-FAMILY: 宋体; Times: ">按钮来实现,因为</SPAN><SPAN
lang=EN-US>Intraweb</SPAN><SPAN
style="FONT-FAMILY: 宋体; Times: ">默认是先执行删除操作,然后才调用</SPAN><SPAN
lang=EN-US>OnClick</SPAN><SPAN
style="FONT-FAMILY: 宋体; Times: ">事件,也就是说我们无法在删除前判断是否允许删除,因为公司下面可能会有很多的员工信息,当公司下员工数目不为零时,我们应该禁止删除公司,所以这里要用</SPAN><SPAN
lang=EN-US>Button</SPAN><SPAN
style="FONT-FAMILY: 宋体; Times: ">来实现(注意:在</SPAN><SPAN
lang=EN-US>intraweb 5.0.35</SPAN><SPAN
style="FONT-FAMILY: 宋体; Times: ">版本中有这个问题,新的版本是否解决了我就不清楚了)。下面是删除的实现代码:</SPAN></P>
<P><SPAN lang=EN-US>procedure TformCorpList.iwbDeleteClick(Sender:
TObject);</SPAN></P>
<P><SPAN lang=EN-US>begin</SPAN></P>
<P><SPAN lang=EN-US> inherited;</SPAN></P>
<P><SPAN lang=EN-US> //</SPAN><SPAN
style="FONT-FAMILY: 宋体; Times: ">因为</SPAN><SPAN
lang=EN-US>IWDBNavigator</SPAN><SPAN
style="FONT-FAMILY: 宋体; Times: ">默认情况下是先删除,然后才调用我们的事件,因此需要修改这一</SPAN></P>
<P><SPAN lang=EN-US>//</SPAN><SPAN
style="FONT-FAMILY: 宋体; Times: ">处理过程,所以只好是用</SPAN><SPAN
lang=EN-US>Button</SPAN><SPAN
style="FONT-FAMILY: 宋体; Times: ">来实现</SPAN></P>
<P><SPAN lang=EN-US> with dmHR do</SPAN></P>
<P><SPAN lang=EN-US> begin</SPAN></P>
<P><SPAN lang=EN-US>
badoQuery.Active:=False;</SPAN></P>
<P><SPAN lang=EN-US>
badoQuery.CommandText:=format('Select count(*) as HumanCount from
tblhuman where CorpID=%s',
[badoCorp.FieldByName('CorpID').AsString]);</SPAN></P>
<P><SPAN lang=EN-US>
badoQuery.Active:=True;</SPAN></P>
<P><SPAN lang=EN-US> if
badoQuery.FieldByName('HumanCount').AsInteger>0 then</SPAN></P>
<P><SPAN lang=EN-US> begin</SPAN></P>
<P><SPAN lang=EN-US>
WebApplication.ShowMessage('</SPAN><SPAN
style="FONT-FAMILY: 宋体; Times: ">先删除该公司下所有的人员信息后才能删除该公司</SPAN><SPAN
lang=EN-US>');</SPAN></P>
<P><SPAN lang=EN-US> Exit;</SPAN></P>
<P><SPAN lang=EN-US> end;</SPAN></P>
<P><SPAN lang=EN-US> badoCorp.Delete;</SPAN></P>
<P><SPAN lang=EN-US> end;</SPAN></P>
<P><SPAN lang=EN-US>end;</SPAN></P>
<P><SPAN
style="FONT-FAMILY: 宋体; Times: ">最后就是公司信息编辑界面的实现了,下面是编辑界面的示意图:</SPAN></P>
<P><SPAN lang=EN-US><IMG height=314
src="IntraWeb开发指南.files/image020.jpg" width=348
v:shapes="_x0000_i1034"> </SPAN></P>
<P><SPAN
style="FONT-FAMILY: 宋体; Times: ">如果当前编辑操作是添加的话,需要设定界面上的信息为空,如果为编辑则要获得公司信息,填充界面编辑框,下面是实现代码:</SPAN></P>
<P><SPAN lang=EN-US>const</SPAN></P>
<P><SPAN lang=EN-US> sCorpIdNotFound = '</SPAN><SPAN
style="FONT-FAMILY: 宋体; Times: ">无法找到相应的公司信息</SPAN><SPAN
lang=EN-US>!';</SPAN></P>
<P><SPAN lang=EN-US>procedure TformEditCorp.SetCorpId(const Value:
Integer);</SPAN></P>
<P><SPAN lang=EN-US>begin</SPAN></P>
<P><SPAN lang=EN-US> FCorpId := Value;</SPAN></P>
<P><SPAN lang=EN-US> //</SPAN><SPAN
style="FONT-FAMILY: 宋体; Times: ">更新界面上的编辑框</SPAN></P>
<P><SPAN lang=EN-US> if not dmHR.badoCorp.Locate('CorpId',
Value, []) then</SPAN></P>
<P><SPAN lang=EN-US> raise
Exception.Create(sCorpIdNotFound);</SPAN></P>
<P><SPAN lang=EN-US> with dmHR.badoCorp do</SPAN></P>
<P><SPAN lang=EN-US> begin</SPAN></P>
<P><SPAN lang=EN-US> iweChnName.Text :=
FieldByName('ChnName').AsString;</SPAN></P>
<P><SPAN lang=EN-US> iweEngName.Text :=
FieldByName('EngName').AsString;</SPAN></P>
<P><SPAN lang=EN-US> iwePhone.Text :=
FieldByName('Phone').AsString;</SPAN></P>
<P><SPAN lang=EN-US> iweFax.Text :=
FieldByName('Fax').AsString;</SPAN></P>
<P><SPAN lang=EN-US> iwmChnInfo.Lines.Text :=
FieldByName('ChnInfo').AsString;</SPAN></P>
<P><SPAN lang=EN-US> iwmEngInfo.Lines.Text :=
FieldByName('EngInfo').AsString;</SPAN></P>
<P><SPAN lang=EN-US> iwmComments.Lines.Text :=
FieldByName('Comments').AsString;</SPAN></P>
<P><SPAN lang=EN-US> end;</SPAN></P>
<P><SPAN lang=EN-US>end;</SPAN></P>
<P><SPAN lang=EN-US>procedure TformEditCorp.SetEditMode(const Value:
TEditMode);</SPAN></P>
<P><SPAN lang=EN-US>begin</SPAN></P>
<P><SPAN lang=EN-US> FEditMode := Value;</SPAN></P>
<P><SPAN lang=EN-US> case FEditMode of</SPAN></P>
<P><SPAN lang=EN-US> emEdit: iwlTitle.Caption :=
'</SPAN><SPAN style="FONT-FAMILY: 宋体; Times: ">编辑公司信息</SPAN><SPAN
lang=EN-US>';</SPAN></P>
<P><SPAN lang=EN-US> emInsert:</SPAN></P>
<P><SPAN lang=EN-US> begin</SPAN></P>
<P><SPAN lang=EN-US>
iwbEdit.Caption := '</SPAN><SPAN
style="FONT-FAMILY: 宋体; Times: ">增加公司</SPAN><SPAN
lang=EN-US>';</SPAN></P>
<P><SPAN lang=EN-US>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -