0

我正在使用超网格,在里面我有从数据库加载到数据表中的值。在我的网格中,我使用 OutlookGroupBy 代码将行分组。我在网格中的行分为两类。优先级 1 和 0。我希望在加载数据时,优先级为 1 的行变为红色,而优先级为 0 的其他行变为正常颜色。

我以语法方式使用 ultragrid,所以我没有在编辑器中使用它的任何功能。

这是我如何初始化网格以及如何从另一个类从数据库加载:

 Dim dt As DataTable = Nothing

        Timer1.Enabled = True
        UltraGrid1.DataSource = Nothing
        Generic.openOrders(dt)
        UltraGrid1.DataSource = dt

        Dim band As Infragistics.Win.UltraWinGrid.UltraGridBand = UltraGrid1.DisplayLayout.Bands(0)
        UltraGrid1.DisplayLayout.ViewStyleBand = Infragistics.Win.UltraWinGrid.ViewStyleBand.OutlookGroupBy
        band.SortedColumns.Add(band.Columns("PRIORITY"), True, True)
        band.SortedColumns.Add(band.Columns("ORDERID"), False, True)
        band.SortedColumns.Add(band.Columns("ORDERTIME"), False, True)

任何人都知道如何将行颜色更改为优先级 1 子行?

4

1 回答 1

2

您可以尝试使用这种方法:

首先,您需要订阅事件InitializeRow,因此由设计器或代码添加(例如,在 Form_Load 中或在设置网格的 DataSource 之前)

grd.InitializeRow += new InitializeRowEventHandler(grd_InitializeRow);

然后,在事件中,编写这样的代码

private void grd_InitializeRow(object sender, InitializeRowEventArgs e)
{
    if(e.Row.Band.Index == 1)
    {
         if(Convert.ToInt32(e.Row.Cells["PRIORITY"].Value) == 1)
              e.Row.Appearance.BackColor = Color.LightGreen;
    }
}

请记住,如果您已设置CellAppearance它们将具有优先级,RowAppearance并且如果您有很多行,最好初始化一个Appearance对象,将其存储在grid.DisplayLayout.Appearances集合中并为所涉及的每一行重用相同的对象。

此外,始终以提高性能为目的,要获得单元格值,最好使用GetCellValue行的方法。这将避免创建一个完整的 Cell 对象只是为了检索它的值。事情有点复杂,因为您需要的UltraGridColumn不仅仅是列的名称,而是在 InitializeRow 事件中,为每一行触发,这是很少的代价。

private void grd_InitializeRow(object sender, InitializeRowEventArgs e)
{
    if(e.Row.Band.Index == 1)
    {
         UltraGridColumn priorityColumn = e.Row.Band.Columns["PRIORITY"];
         if(Convert.ToInt32(e.Row.GetCellValue(priorityColumn)) == 1)
              e.Row.Appearance.BackColor = Color.LightGreen;
    }
}

编辑: VB.NET 中的相同代码

....
AddHandler grd.InitializeRow, AddressOf Me.grd_InitializeRow
....


Private Sub grd_InitializeRow(sender As System.Object, e As InitializeRowEventArgs)
    If e.Row.Band.Index = 1 Then
        Dim priorityCol As UltraGridColumn = e.Row.Band.Columns("PRIORITY")
        If Convert.ToInt32(e.Row.GetCellValue(priorityCol)) = 1 Then
            e.Row.Appearance.BackColor = Color.LightGreen
        End If
    End If
End Sub

此外,使用 UltraGridColumn 类,您需要在文件开头添加

Imports Infragistics.Win.UltraWinGrid
于 2013-01-11T15:09:12.260 回答