Infragisticsグリッド“オンデマンド”外観
-
08-07-2019 - |
質問
Infragisticsグリッドを使用しており(ほとんどの場合、最後に8.2バージョンがあります)、行/セルの外観を「オンデマンド」に設定します。一種の「動的な外観」を提供できるようにするため。
たとえば、値に応じて一部のセルを赤または緑にしたい。他の特性(フォント、サイズ、画像など)も調整したい場合があります。
それを行うのに最適な場所は、セルが再描画される前に発生するイベントです...しかし、Infragisticsにはそのようなイベントはないようです...
または私は間違っていますか?助けが必要ですか?
明確化: WinForms Infragistics UltraGridについて話している
解決 3
ようやく、この問題の2つの解決策を思いつきました。
一部の動的コンテンツでは、グリッド要素の外観を使用して、「オンデマンド」で再初期化します。
非常にリソースが重要な外観には、UltraGrid.DrawFilterを使用します(IUIElementDrawFilterインターフェイスも参照)。
他のヒント
数年前にIG WebGridでこれを正確に実行する必要がありました。ただし、WebGridには単一のレンダリングポイントという利点がありました。HTMLが発行されると、設定されました!
WinGridでこれを処理するために、グリッドとデータソースの両方でさまざまなイベントを試しましたが、すべての段階で重大な障害に遭遇しました。私が仕事に着いた唯一のイベントは Paint
で、これはパフォーマンスの問題を引き起こす可能性があります。
Paint
の場合、ここで一緒にハッキングしました。私はこのコードを誇りに思っていませんし、実稼働環境には入れないでしょうが、とにかくここにあります(C#):
private void UltraGrid1_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
{
foreach (UltraGridRow r in UltraGrid1.Rows)
{
foreach (UltraGridCell c in r.Cells)
{
if (c.Text == "foo")
c.Appearance.BackColor = Color.Green;
}
}
}
およびVB:
Private Sub UltraGrid1_Paint(ByVal sender As System.Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles UltraGrid1.Paint
For Each r As UltraGridRow In UltraGrid1.Rows
For Each c As UltraGridCell In r.Cells
If c.Text = "foo" Then
c.Appearance.BackColor = Color.Green
End If
Next
Next
End Sub
イベントがあります。私はそれが何と呼ばれているかを正確に覚えていませんが、「DataRowBound」や「ItemDataBinding」などのようなものにならなければなりません。
また、この記事が役立つ場合があります。
これはあなたの質問と関係があるわけではありませんが、Infragisticsコントロールの頻繁な使用は避けたいと思います。非常に重く、ページのレンダリングプロセスが大幅に遅くなります。ちょうど私の$ 0.02。