據我所知,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,並嘗試對數據進行篩選,此選項將是上述列禁用,我覺得出現這種情況是由於該顯示方法。有什麼辦法可以實現這個功能嗎?
我應該嘗試(右單擊)以添加另一個菜單項那裏,做一個新的對話框(其中我會記下的項目名稱)的幫助下過濾,不知何故,然後在表格上的刷新?
更新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的正確方法。我想鉤住通常的菜單,並在那裏添加新的查找和刪除過濾器。而..刪除過濾器需要一段時間,我應該以某種方式發信號,以便用戶不要驚慌。
是否要按項目名稱(如問題中所述)或名稱別名(在更新1中實施)進行過濾?這兩個領域可能的解決方案是完全不同的。 –
@ FH-Inway,我想過濾項目名稱。 –
我似乎無法用這種方式控制事情。如果用戶想要獲得許多結果,我將不得不添加許多範圍,並執行strScan以某種方式檢查包含所需字符串的所有值,並且可能該字符串包含*或!等等..我去無處.. –