動的に変化するデータからロードするテーブルがあります。 5秒ごとに更新されます。この例を使用して、ag-gridを使用しています: https://www.ag-grid.com/javascript-grid-sorting/index.php
セルの値が100で、(これよりも小さい、つまり<100)になると仮定するなど、値が変化するセルの色を変更することは可能ですか。セルを赤色にし、大きくなると緑色にします。私はこの例を使用してそれを行おうとしています: https://www.ag-grid.com/javascript-grid-cell-styling/index.php
しかし、私はこれを行う方法を理解できません。
更新:私はそれをこのようにしていますが、色は変わりません:
var columnDefs = [
{headerName: "Arr Px Slippage", field: "total_wt_arr_slp", width: 100, newValueHandler: compareValues},
{headerName: "IVWAP Slippage", field: "total_wt_ivwap_slp", width: 100}
];
function compareValues(params) {
if (params.oldValue > params.newValue){
return {color: 'green', backgroundColor: 'black'};
console.log(params.newValue);
}
if (params.oldValue < params.newValue){
return {color: 'red', backgroundColor: 'black'};
}
}
あなたが書いたことはほとんど正しいです:
function compareValues(params) {
if (params.oldValue > params.newValue){
return {color: 'green', backgroundColor: 'black'};
console.log(params.newValue);
}
if (params.oldValue < params.newValue){
return {color: 'red', backgroundColor: 'black'};
}
そして、Jarod Moserがこのコールバックのparamsオブジェクトについて提供した情報は、的確で重要です。
あなたが抱えている問題は、あなたがreturn {style}
しようとしているのに、それができないということです。 html要素(<div>
を含む)にアクセスし、その上にクラスを設定する必要があります(クラスは希望のスタイルで定義されています)。 params.eGridCell
にアクセスできるag-gridでこれを実行しましたが、この特定のコールバック内ではeGridCellを使用できません。 <div>
にアクセスする良い方法を見つけたら、見つけたものでこの投稿を編集します。
編集-追加情報
私はあなたがやろうとしていることにnewValueHandlerを使うとは思わない。
データをどのように更新しているかはわかりませんが、5秒ごとに更新される可能性があると言っています。
ただし、セルを更新することにした場合は、rowDataオブジェクトにプロパティ「origValue」を追加し、セル値を更新する前に、現在の値を「origValue」に設定してから、新しい値をvalueに設定できます。次に...コールバック関数を使用してcellClass
列プロパティを使用し、新しい値を「origValue」と比較して、目的のスタイルを返すことができます。
ドキュメントからの例:
// return class based on function
var colDef3 = {
name: 'Function Returns String',
field' 'field3',
cellClass: function(params) { return (params.value==='something'?'my-class-1':'my-class-2'); }
}
// return array of classes based on function
var colDef4 = {
name: 'Function Returns Array',
field' 'field4',
cellClass: function(params) { return ['my-class-1','my-class-2']; }
}
CellClassのparamsオブジェクトは行データにアクセスでき、新しい値と元の値を比較できます。
あなたが掘ったら多くのオプションがあります。あなたが最善だと思うものを選択してください。
各列の属性である newValueHandler
を使用できるはずです。
ドキュメントから:
単純なテキスト編集を使用したいが、行に挿入する前に何らかの方法で結果をフォーマットしたい場合は、列にnewValueHandlerを指定できます。これにより、値に検証または会話を追加できます。
newValueHandlerには、次の属性を持つparamsオブジェクトが提供されます。
- ノード:問題のグリッドノード。
- data:問題の行データ。
- oldValue: 'field'が列定義にある場合、編集前のデータの値が含まれます。
- newValue:デフォルトのエディターに入力された文字列値。
- rowIndex:仮想化された行のインデックス。
- colDef:列の定義。
- context:gridOptionsで設定されたコンテキスト。 api:ag-GridAPIへの参照。
したがって、次のようなものがあります。
var colDefs = [{
header: 'comparing to previous val'
newValueHandler: compareValues
}]
function compareValues(params){
if (params.oldValue > params.newValue){ //make it red}
if (params.oldValue < params.newValue){ //make it green}
}
これは、agグリッドセルテキストの色と背景色を変更できるコードスニペットです。
var colDef = {
name: 'Dynamic Styles',
field' 'dummyfield',
cellStyle: function(params) {
if (params.node.value=='Police') {
//Here you can check the value and based on that you can change the color
//mark police cells as red
return {color: 'red', backgroundColor: 'green'};
} else {
return null;
}
}
}
実際、私はちょうど私の仕事を始めました。色を変更する各列に「cellClassRules」属性が必要です。何かのようなもの:
_{headerName: "header", field:"field",suppressMenu: true, volatile: true, suppressMovable: true, cellClassRules: {'bold-and-red': 'x>1'} }
_
ここで、ルールの「x」は列の値です。また、列をvoaltile:trueとしてマークする必要があります。
揮発性フィールドを動的に変更するには、データを更新するときにapi.softRefreshView()
が必要です。
cssクラス 'bold-and-red'は、次のようにhtmlファイルで定義できます。bold-and-red{color:darkred; font-weight:太字; }