0

私はウルトラグリッドを使用しており、内部にはデータベースからデータテーブルにロードする値があります。私のグリッドでは、OutlookGroupByコードを使用して行をグループにグループ化します。グリッド内の私の行は2つのカテゴリにあります。優先度1と0。データが読み込まれるときに、優先度1の行を赤にし、優先度0の行を通常の色にします。

私はウルトラグリッドを文法的に使用しているので、エディターでその機能を使用しませんでした。

グリッドを初期化する方法と、別のクラスのデータベースからロードする方法は次のとおりです。

 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 に答える