表格框中的行塊著色<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />你好,
我有一個表格框,其中包含大量行,這些行自然地分組為每行三行的塊(因為第 1 到 3 行與一種化合物相關,第 4 到 6 行與另一種化合物相關,第 7 到 9 行與第三行相關, 等等)。我想對行進行著色以使化合物塊在視覺上更容易區分 - 所以我想對第 1 到 3 行進行著色,然後將第 4 到 6 行保留為白色,然後對第 7 到 9 行進行著色,然後將第 10 到第 12 行保留白色等(一次對三行著色的要求意味著我不能只使用“<< 陰影交替行”屬性。)
我可以使用“<< set selected rows()”屬性預先選擇三行的每個備用塊,但是如果用戶隨後單擊任何行或以其他方式選擇/取消選擇它們,則該著色模式將丟失.因此,我在“<< set row change function”屬性中應用了相同的屬性 - 因此,如果用戶單擊表格上的任意位置,則會立即重新應用陰影。我最終得到這樣的結果:
名稱列表 = 重複({“A”},3)||重複({“B”},3)||重複({“C”},3)||重複({“D”},3) ||重複({“E”},3)||重複({“F”},3)||重複({“G”},3)||重複({“H”},3);
三列表 = {1, 2, 3, 7, 8, 9, 13, 14, 15, 19, 20, 21};
tb = 表格框(
String Col Box("名稱", nameList),
Number Col Box("First", index(1, 24)),
Number Col Box("第二個", index(25, 48)),
Number Col Box("第三個", index(49, 72)),
<< 設置所選行顏色(“青色”),
<< 設置選定的行(三個列表),
<< 設置行更改功能(tb << 設置選定行(threeList)),
<< 設置可滾動(1),
<< 設置列邊框(1),
<< 設置下劃線標題(1)
);
new window("我的窗口", tb);
這可行,但似乎有點令人費解。任何人都可以提出一種更簡單的方法嗎?
非常感謝。
回复:在表格框中對行塊進行著色只是為了解決您對使用新數據視圖的一些擔憂:
處理用戶操作所需要做的就是添加行狀態處理程序。它將檢測更改並分支到一個函數,您可以在其中以編程方式解決問題。例如在這種情況下,如果視圖已排序,您可以將單元格顏色重置為新順序
F =功能({一個} ,<重置單元格顏色> ) ;
rs = dt <<製作行狀態處理程序( F ) ;
回复:在表格框中對行塊進行著色謝謝大家 - 這對所有方面都非常有幫助,我將把問題打勾為已經解決,因為我現在有足夠的東西來解決我的原始查詢。
我嘗試了 Vince 在創建具有所需選擇的表格框後設置“<< set selectable rows(0)”屬性的建議,但不幸的是,似乎這樣做實際上在生效之前清除了選擇。
我已經復制了 Jim 的腳本,因為我總是對 eval()、substitute() 和 expr() 結構組合的語法有困難,並且有工作示例來適應讓生活變得更輕鬆!實際上,我至少暫時會保留我的表格框,因為我正在創建的報告的結構更適合該輸出格式 - 但新數據框路線是我以前沒有考慮過的, 並且很可能在未來很有用。
在一次私人交流中也有人向我指出,我可能需要考慮用戶隨後嘗試按其中一個列對錶格框進行排序(他們可以通過右鍵單擊輕鬆完成)對我自己的解決方案的影響.實際上,在這種情況下這不是問題,因為表格框是最終報告的一部分,在其中進一步對其進行排序沒有用處,但這一點得到了很好的理解。
最後,我順便注意到“<< set row change function()”屬性實際上不會工作除非“<< set selected rows()”屬性明確選擇了一個或多個行,或者“<< set selectable rows(1)”屬性已包含在屬性設置列表中。這只是一件小事,但它讓我感到困惑,直到我意識到在我能夠做我想做的事情之前至少需要其中一個。
再次,非常感謝大家。
回复:在表格框中對行塊進行著色我處理這個問題的方法是使用 New Data Box() 函數,而不是使用 Table Box(),而是使用數據表。有了它,您可以為單元格等著色,並充分利用數據表的所有編輯功能。
這是一個腳本來說明我在說什麼:
名稱默認到這裡( 1 ) ;
dt =打開( "$SAMPLE_DATA/大類.jmp" ,無形的) ;
// 選擇 3 行的組
為了( ķ = 1 , ķ <= 3 , ķ ++,
為了(一世= ķ ,一世<= N行( dt ) ,一世=一世+ 6 ,
行狀態(一世) =選定的州( 1 )
)
) ;
名單=作為列表( dt <<獲取選定的行) ;
dt <<清除選擇;
// 遍歷所有列並設置單元格顏色
碰撞= dt <<獲取列名( “細繩” ) ;
為了(一世= 1 ,一世<= N 項(碰撞) ,一世++,
評估(
代替(
表達式(
柱子( dt ,碰撞[一世] ) <<彩色細胞( { “紅色的” , _名單_ } )
) ,
表達式( _名單_ ) ,名單
)
)
) ;
//設置顯示窗口
淨重=新窗戶( “展示” ,
V 列錶框(
結核病=文本框( “ 這個例子” ) ,
vlb = V 列錶框()
)
) ;
數據庫= dt <<新數據框() ;
vlb <<附加(數據庫) ;
數據庫<<關閉側面板( 1 ) ;
結核病<<設置字體大小( 20 ) ;
它產生以下顯示窗口

回复:在表格框中對行塊進行著色可以做這樣的事情。
指數 = 1 :: 99 ;
新窗戶( “窗戶” , tb =表格框( NumberColBox ( “柱子” , 指數)));
n= 3 ; //您可以將其更改為您的組的任何數字
行 =位置(模組(地面((指數- 1 )/n), 2 )); // 只給出交替的 n 個脈衝組
結核病<<設置選定的行(行);
希望這可以幫助。乾杯。
*編輯*剛剛意識到這不是您可能要問的部分。對不起。
您可以只選擇行,然後使它們無法選擇嗎?
tb << 設置可選行(0);