据我了解, ProductName 列是通过显示方法显示的。至少对于我在这里的实现,此方法位于 InventSum 表中:
display public ItemNameDisplay itemName()
{
// Fields might not have been selected on the specified buffers, or might have been updated since selection
this.checkInvalidFieldAccess(false);
if (this.InventDimId)
{
return this.inventTable().itemName(InventDim::find(this.InventDimId));
}
return this.inventTable().itemName();
}
当我按 Ctrl + G 并尝试过滤数据时,上列的此选项被禁用,我认为这是由于该显示方法而发生的。有什么办法可以实现这个功能吗?
我是否应该尝试(右键单击)在那里添加另一个 MenuItem 并在新对话框的帮助下进行过滤(我将在其中写下项目名称),然后以某种方式刷新表单?
更新1:
我已经为我的特殊情况找到并编辑了这种方法:
public void context()
{
InventTable inventTable;
int selectedMenu;
real test;
formrun fr;
Args ag;
Itemname strtext;
querybuilddataSource qb1;
queryrun qr;
query q;
PopupMenu menu = new PopupMenu(element.hWnd());
int a = menu.insertItem('Find');
int c = menu.insertItem('Remove Filter');
selectedMenu = menu.draw();
switch (selectedMenu)
{
case -1:
break;
case a:
ag = new args('SysformSearch');
fr = new formrun(ag);
fr.run();
fr.wait();
strtext = fr.design().controlName('FindEdit').valueStr();
if(strtext)
{
select ItemId from inventTable
where inventTable.NameAlias == strtext;
InventSum_DS.filter(FieldNum(InventSum,ItemId),Sysquery::value(inventTable.ItemId));
}
break;
case c :
InventSum_DS.removeFilter();
break;
Default:
break;
}
}
我仍然认为仅显示新的 PopupMenu 不是正确的方法。我想连接到通常的菜单并在那里添加新的查找和删除过滤器。并且..删除过滤器需要一段时间,我应该以某种方式发出信号,这样用户就不会惊慌。