Инфраструктурная сетка & # 8220; по требованию & # 8221; внешний вид
-
08-07-2019 - |
Вопрос
Мы используем сетку Infragistics (скорее всего, у нас будет версия 8.2 в конце), и мы хотим настроить внешний вид строк / ячеек " по требованию " чтобы иметь возможность обеспечить своего рода «динамический внешний вид».
Например, я хочу, чтобы какая-то ячейка была красной или зеленой, в зависимости от ее значения. Возможно, мы захотим настроить и другие характеристики (шрифт, размер, изображение и т. Д.).
Идеальным местом для этого было бы какое-то событие, которое происходит до того, как ячейка перекрашивается ... Но, похоже, в Infragistics такого события не существует ...
Или я не прав? Любая помощь?
Уточнение. Я говорю о WinForms Infragistics UltraGrid
Решение 3
Мы наконец нашли два решения этой проблемы.
Для некоторого динамического содержимого мы используем внешний вид элементов сетки и повторно инициализируем его «по требованию».
Для экстремально критичного ресурса мы используем 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 доллара.