2017-04-03 113 views
0

我很努力讓我的網格在使用api.sizeColumnsToFit()時均勻可靠地顯示列寬。AG網格不均勻的列寬

我已經配置我的網格當父DIV /瀏覽器窗口大小調整,以調整列:

this.gridOptions = <GridOptions>{ 
     onModelUpdated:() => { 
      this.gridOptions.api.sizeColumnsToFit(); 
     }, 
     onGridSizeChanged:() => { 
      this.gridOptions.api.sizeColumnsToFit(); 
     } 
    }; 

這工作,但結果列寬度往往不是參差不齊。請參閱下面第13周的月份的第一天和第二天: Day 1 and 2 of week 13 uneven

任何建議,以使其更可靠,將非常歡迎。

+0

我想你的初始columnDefs有相同的寬度爲每列,除了「任務」似乎有「suppressSizeToFit設置爲true?與[this plnkr]類似(https://embed.plnkr.co/1aJzknqMbS2LwaSk1R7P/)? –

+0

Spot on。如果您運行plnkr並將窗口寬度向右再增加幾次,然後再增加再次緩慢縮小窗寬,Athlete Age列在所有的寬度上不成比例地縮小其他欄目。這是我想要避免的。 – TDC

回答

2

這裏是一個plnkr爲您提供了一個可能的解決方案。從本質上說這裏是你能做什麼:

var windowWidth = document.querySelector('#myGrid').offsetWidth - 170 - 17, 
// calculate the window width minus any columns you don't want to size for 
    and a little magic number for the vertical scrollbar (17 was for chrome on mac) 

    sizableColumns = gridOptions.columnApi.getColumnState().map(e=>e.colId).filter(e=>e!='athlete'), 
// get the colId of only the columns that you want to resize 

    sizableColumnWidth = Math.floor(windowWidth/sizableColumns.length); 
// calculate the width of each column by dividing the available width by the number of columns 

    sizableColumns.forEach(e=>gridOptions.columnApi.setColumnWidth(e,sizableColumnWidth)) 
// iterate through the columns you want to resize and set their new column width 

不過,我想,你可能會考慮很多用戶將如何來調整自己的瀏覽器窗口......不僅如此,但調整更好他們的窗戶緩慢多次。檢查這些帖子:

http://davidgoss.co/2014/04/15/users-do-resize-their-browser-windows-take-2/

https://medium.com/@stephenkeable/do-users-resize-their-browser-windows-or-is-it-just-developers-and-designers-e1635cbae1e1

這兩個職位表明,臺式機用戶的2%左右的調整他們的瀏覽器。而更小的部分將會多次緩慢調整瀏覽器的大小。也許你只是簡單地告訴這些1%不要像他們那樣調整瀏覽器的大小,或者允許手動調整列的大小,以便如果他們注意到這種奇怪的行爲,他們可以自己調整列的大小。


技術說明:

你的報道行爲發生,因爲該算法規模列,使其符合是相當複雜的。它考慮到所有列的相對大小並適當擴大它們,所以如果你有4列100,200,100;並調整了窗口的大小,那麼中間列的大小仍然是其他大小的兩倍。

該算法還將任何剩餘的像素都放在第一列,所以如果您有9列和100px以適合它,則8列的大小應爲11 px,其中一列的大小爲12。列將真正「適合」,並沒有留下一些像素未填充的列(如我建議的選項)

+0

我感謝你的深思熟慮的回覆Jarod,我會審查你的建議代碼。我同意你的觀點,即平衡或許我的方法不適合使用自動列寬,我應該重新考慮使用固定寬度列的設計目標。我不確定這是否應該被標記爲已解決或有幫助? – TDC