Инфраструктурная сетка & # 8220; по требованию & # 8221; внешний вид

StackOverflow https://stackoverflow.com/questions/284310

Вопрос

Мы используем сетку 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 доллара.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top