Инфраструктурная сетка "по запросу" внешний вид - PullRequest
0 голосов
/ 12 ноября 2008

Мы используем сетку Infragistics (скорее всего, у нас будет версия 8.2 в конце), и мы хотим настроить внешний вид строк / ячеек «по требованию», чтобы обеспечить своего рода «динамическое отображение» .

Например, я хочу, чтобы какая-то ячейка была красной или зеленой, в зависимости от ее значения. Возможно, мы захотим настроить и другие характеристики (шрифт, размер, изображение и т. Д.).

Идеальным местом для этого было бы какое-то событие, которое происходит до того, как ячейка перекрашивается ... Но, похоже, в Infragistics такого события нет ...

Или я не прав? Любая помощь?

Уточнение: Я говорю о WinForms Infragistics UltraGrid

Ответы [ 3 ]

1 голос
/ 12 ноября 2008

Я должен был сделать именно это с 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
0 голосов
/ 20 апреля 2009

Мы наконец-то нашли два решения этой проблемы.

Для некоторого динамического контента мы используем внешний вид элементов сетки и повторно инициализируем его «по требованию».

Для крайне критичного ресурса мы используем UltraGrid.DrawFilter (см. Также интерфейс IUIElementDrawFilter).

0 голосов
/ 12 ноября 2008

Есть событие. Я не помню точно, как это называется, но это должно быть что-то вроде «DataRowBound» или «ItemDataBinding» и т. Д.

Также, эта статья может помочь.

Не то чтобы это как-то связано с вашим вопросом, но я бы держался подальше от интенсивного использования элементов управления Infragistics - они очень тяжелые и значительно замедляют процесс рендеринга страниц. Просто мои 0,02 доллара.

...