2015-01-09 17 views
2

我無法鍛鍊這個看似簡單的任務。我有一個名爲PrintAll的自定義CheckBox,我想要的是當它被選中時,網格中的所有行都被選中/突出顯示。以下是我所嘗試的:X ++:從代碼中突出顯示網格中的所有記錄(包括未加載的記錄)

選項1:傳遞CTRL + SHIFT + END。下面的例子通過CTRL + A組合。

public boolean modified() 
{ 
    boolean ret; 

    ret = super(); 
    #task 

    if(PrintAll.value()) 
    { 
     // CTRL+A 
     element.task(#taskSelectAll); 
    } 

    return ret; 
} 

結果:僅選擇加載的記錄,所以說20出500如果向下滾動,它一直選擇即將到來的。

CTRL + SHIFT + END組合從UI的作品,但它給這個盒子:: YESNO:

您不能選擇所有線路,包括最後一個,因爲不是所有的 線都在被加載目前的時間。加載所有的行可能需要一些時間 !

是否要繼續選擇線路並立即加載所有線路?

當我測試的是什麼taskid CTRL + SHIFT + END得到,看來它得到2842,不幸的是使用該ID代碼爲element.task(2842);亮點只有第一個記錄。

因此,如果不是CTRL + A,我可以正確提交CTRL + SHIFT + END,問題就解決了。

編輯:(部分解決方案)運行element.task(2842);兩次讓我在上面的警告,這樣我就可以單擊Yes並選中所有行。有誰知道我怎麼能繞過這個警告?

選項2:嘗試的形式和數據源的各種屬性,使其載入可用的所有記錄,而不是第20位

結果:沒有奏效。

選項3:也許CheckBox,可以在某些表單中找到作爲第一個字段,並且一旦選定,選擇所有記錄,可以做同樣的事,但我找不到如何添加它我的自定義表單?雖然也許這個選項也選擇加載記錄,所以它不會對我現在擁有的東西產生影響。

回答

1

這是最後爲我工作的(source)。請注意,InventDim不是我的主要數據源。 InventTransOrigin是一個,但它沒有奏效。

所以我想,你可以有這樣的方法,如果你不希望展現給最終用戶的任何警告:

public boolean modified() 
{ 
    InventDim inventDimTMP; 

    boolean ret; 

    ret = super(); 

    if(PrintAll.value()) 
    { 
     inventDimTMP = InventDim_DS.getFirst(); 

     while(inventDimTMP) 
     { 
      InventDim_DS.findRecord(inventDimTMP); 
      InventDim_DS.mark(true); 
      inventDimTMP = InventDim_DS.getNext(); 
     } 
    } 

    return ret; 
} 

或這一個,如果你想讓他們看到警告上面提到的:

public boolean modified() 
{ 
    boolean ret; 

    ret = super(); 

    if(PrintAll.value()) 
    { 
     // Marks first record 
     element.task(2842); 
     // Marks all records 
     element.task(2842); 
    } 

    return ret; 
} 
相關問題