FineUIPro/Mvc/Core的下個版本(v7.0.0),我們會新增一個表格示例,用來展示如何自定義貨幣柵格化顯示。
首先看下示例顯示效果:
工資列中,紅色豎線表示小數分隔符,綠色豎線表示千分位分隔符。
那麼怎麼實現這個效果呢?這就需要藉助於列渲染函式,並自定義CSS樣式。
本列的標籤定義:
<f:RenderField Width="200px" ColumnID="Salary" DataField="Salary" HeaderText="工資" RendererFunction="renderSalary" />
列的自定義渲染函式:
<script> // 單元格總數(8, 11, 14) var CELL_COUNT = 11; function renderSalary(value) { var result = '', html = []; var items = (value + '').split('.'); var integerPart = items[0]; var decimalPart = items[1]; result += integerPart; if (decimalPart) { result += decimalPart.charAt(0) || '0'; result += decimalPart.charAt(1) || '0'; } else { result += '00'; } var prefixCount = CELL_COUNT - result.length; if (prefixCount > 0) { for (var i = 0; i < prefixCount; i++) { result = '_' + result; } } html.push('<table class="currency"><tbody><tr>'); for (var i = 0; i < CELL_COUNT; i++) { var tdCls = ''; if ((i + 1) % 3 === 0) { tdCls = 'separator'; if (i + 1 + 3 > CELL_COUNT) { tdCls += ' lastone'; } } var cellValue = result.charAt(i); html.push(F.formatString('<td class="{0}">{1}</td>', tdCls, cellValue === '_' ? ' ' : cellValue)); } html.push('</tr></tbody></table>'); return html.join(''); } </script>
這段JavaScript程式碼稍微有點複雜,我們就以數字 6888.5 為例分析一下。
1. 定義柵格的個數(CELL_COUNT)
8個:6位整數部分,2位小數部分
11個:9位整數部分,2位小數部分
2. 獲取整數部分和小數部分
integerPart === '6888'
decimalPart === '5'
3. 生成需要渲染的字串
result === '00000688850'
4. 迴圈生成HTML片段
在3位一個分割符的地方,為td標籤增加separator樣式
如果是最後一個分隔符,除了separator樣式類,還需要增加一個lastone樣式類,因為這個小數分隔符有別於前面的千分位分隔符。
最終生成的HTML片段如下所示:
<html> <head></head> <body> <table class="currency"> <tbody> <tr> <td> </td> <td> </td> <td class="separator"> </td> <td> </td> <td> </td> <td class="separator">6</td> <td>8</td> <td>8</td> <td class="separator lastone">8</td> <td>5</td> <td>0</td> </tr> </tbody> </table> </body> </html>
下面就是CSS定義了:
.f-grid-cell-Salary .f-grid-cell-inner { padding: 0; } .currency { border-collapse: separate; table-layout: fixed; width: 100%; border-spacing: 0px; } .currency td { border-right-width:1px; border-right-style: solid; border-right-color: #ddd; text-align: center; } .currency td:last-child { border-right-color: transparent; } .currency td.separator { border-right-color: green; } .currency td.separator.lastone { border-right-color: red; }
需要注意如下兩點:
- 最後一個柵格右側邊框為透明色,透過 .currency td:last-child 來選擇相應節點
- 小數分隔符的右側邊框為紅色,透過 .currency td.separator.lastone 來選擇相應節點
三石出品,必屬精品