在我的 powerbuilder 19 项目中,一切都是关于文章管理的。当我单击“新建”按钮时,它显示一个空的 dwc_article(freeform),我必须插入所有文章详细信息(参考、名称...)以及 dwc_article 的 itemfocuschanged 事件。当我插入空引用或名称时,我确保收到消息框“验证错误”。问题是,当我在 dwc_report (表格)中选择一行并单击“更新”时,它会在 dwc_aritcle (自由格式)中显示文章详细信息,但是当我单击“新建”按钮时,它会显示验证错误消息框 3 次,并且我不希望它在这种情况下显示。
*这是 dwc_article 的 itemfocuschanged 事件的脚本:
integer li_row
string ls_reference
string ls_name
li_row = This.GetRow()
cb_3.Enabled = false
cb_7.Enabled = false
// Check if the focus is on the reference field
if This.GetColumnName() <> "reference" then
// Get the value of the reference field
ls_reference = This.GetItemString(li_row, "reference")
// Check if the reference field is empty or has more than 50 characters
if IsNull(ls_reference) or Trim(ls_reference) = "" or Len(ls_reference) > 50 then
MessageBox("Validation Error", "Reference field must not be empty and should have 50 characters or less.")
// Set focus back to the reference field
cb_3.Enabled = false
cb_7.Enabled = false
This.SetColumn("reference")
return 1 // Prevent focus change
else
end if
end if
li_row = This.GetRow()
// Check if the focus is on the name field
if This.GetColumnName() <> "name" and This.GetColumnName() <> "reference" then
// Get the value of the name field
ls_name = This.GetItemString(li_row, "name")
cb_3.Enabled = false
cb_7.Enabled = false
// Check if the name field is empty or has more than 50 characters
if IsNull(ls_name) or Trim(ls_name) = "" or Len(ls_name) > 50 then
MessageBox("Validation Error", "Name field must not be empty and should have 50 characters or less.")
// Set focus back to the name field
This.SetColumn("name")
cb_3.Enabled = false
cb_7.Enabled = false
return 1 // Prevent focus change
else
cb_3.Enabled = true
cb_7.Enabled = true
end if
end if
return 0
*这是“新建”按钮的脚本:
dwc_article.reset()
dwc_article.insertrow(0)
char reference
dwc_article.scrolltorow(dwc_article.insertrow(0))
// Scroll to the newly inserted row
long ll_new_row
ll_new_row = dwc_article.InsertRow(0)
dwc_article.ScrollToRow(ll_new_row)
// Get the current date
date ld_date_creation
ld_date_creation = today()
string ls_formatted_date
ls_formatted_date = String(ld_date_creation, "yyyy-mm-dd")
// Set the current date to the "date_de_creation" column
dwc_article.SetItem(ll_new_row, "date_de_creation", ls_formatted_date)
bl_btn_new_clicked = true
dwc_article.modify("reference.Protect='0'") // This removes input capability from all columns
dwc_article.modify("name.Protect='0'")
dwc_article.modify("prix.Protect='0'")
dwc_article.modify("date_de_creation.Protect='1'")
这是“更新”按钮的脚本:
long ll_row
ll_row = dwc_report.GetSelectedRow(0) // Get the selected row index in dwc_report
if ll_row >= 0 then // If a row is selected
// Clear existing data in dwc_article
dwc_article.Reset()
long ll_nextRow
ll_nextRow = dwc_article.RowCount() + 1
// Copy data from dwc_report to dwc_article
dwc_report.RowsCopy(ll_row, ll_row, Primary!, dwc_article, ll_nextRow, Primary!)
// Disable all inputs in dwc_article
dwc_article.modify("reference.Protect='1'")
dwc_article.modify("name.Protect='0'")
dwc_article.modify("prix.Protect='0'")
dwc_article.modify("date_de_creation.Protect='1'")
// Retrieve data in dwc_article to reflect changes
//dwc_report.retrieve()
//dwc_article.retrieve()
else
MessageBox("No row selected", "Please select a row in the report")
end if
我尝试了chatgpt,但它没有给我解决方案
输入验证通常在数据窗口的 Itemchanged 事件中完成(或者有时在从 Itemchanged 事件发布的用户定义事件中完成)。当您在“新建”按钮代码中多次滚动到行时,就会发生行焦点更改。