バージョン

IGroupByEvaluator インターフェース

どのように行がグループ化されるかを決定するために使用されるインターフェイス。
シンタックス
'宣言
 
Public Interface IGroupByEvaluator 
public interface IGroupByEvaluator 
解説

IGroupByEvaluatorインターフェイスは、行をグループ化するためのカスタムロジックを供給するために使用されます。GroupByMode 設定のどれもがユーザーのニーズを満たさない場合、カスタムグルーピングを実行するために GroupByEvaluator を供給できます。グループ化の基準がソートの基準と一致しない場合、IGroupByEvaluatorEx インターフェイスを実装する必要があります。IGroupByEvaluatorEx はこれから派生し、行をソートするための追加 Compare メソッドを提供します。

以下の例はIGroupByEvaluatorの実装方法を示し、行は文字列フィールドの最初の2文字ずつグループ化されます。

          private void ultraGrid1_InitializeLayout(object sender, Infragistics.Win.UltraWinGrid.InitializeLayoutEventArgs e)
          {
          // set the view style to outlook group by
          e.Layout.ViewStyleBand = ViewStyleBand.OutlookGroupBy;

          Infragistics.Win.UltraWinGrid.UltraGridColumn column;

          // get the CompanyName column
          column = e.Layout.Bands[0].Columns["CompanyName"];

          // set the GroupByEvaluator on the column to an instance of MyGroupByEvaluator
          column.GroupByEvaluator = new MyGroupByEvaluator();

          // set the column's HiddenWhenGroupBy property to false since we are
          // grouping by the 1st 2 characters of each string we want the full
          // company name to show in each row
          //
          column.HiddenWhenGroupBy = DefaultableBoolean.False;
          }

          public class MyGroupByEvaluator : Infragistics.Win.UltraWinGrid.IGroupByEvaluator
          {
          public object GetGroupByValue( UltraGridGroupByRow groupbyRow, UltraGridRow row )
          {
          string val;

          // get the default value from the groupbyRow
          if (groupbyRow.Value == null )
          val = "";
          else
          val = groupbyRow.Value.ToString();

          // if it is longer than 2 characters truncate it
          if ( val.Length > 2 )
          val = val.Substring( 0, 2 );

          // Convert the string to uppercase for display
          // in the groupbyrow description.
          return val.ToUpper();
          }

          public bool DoesGroupContainRow( UltraGridGroupByRow groupbyRow, UltraGridRow row )
          {
          // get the related cell's value as a string
          string cellValue = row.Cells[groupbyRow.Column].Value.ToString();

          // if it is longer than 2 characters truncate it
          if ( cellValue.Length > 2 )
          cellValue = cellValue.Substring(0, 2);

          // Do a case insensitive compare
          return string.Compare(groupbyRow.Value.ToString(), cellValue, true) == 0;
          }
          }
        
使用例
Imports Infragistics.Shared
Imports Infragistics.Win
Imports Infragistics.Win.UltraWinGrid

  Public Class MyGroupByEvaluator
      Implements Infragistics.Win.UltraWinGrid.IGroupByEvaluator

      Private Function GetGroupByValue(ByVal groupbyRow As UltraGridGroupByRow, ByVal row As UltraGridRow) As Object Implements IGroupByEvaluator.GetGroupByValue

          Dim val As String

          ' Get the default value from the groupbyRow.
          If groupbyRow.Value Is Nothing Then
              val = ""
          Else
              val = groupbyRow.Value.ToString()
          End If

          ' If it is longer than 2 characters truncate it.
          If val.Length > 2 Then
              val = val.Substring(0, 2)
          End If

          ' Convert the string to uppercase for display in the group-by row's description.
          Return val.ToUpper()

      End Function

      Private Function DoesGroupContainRow(ByVal groupbyRow As UltraGridGroupByRow, ByVal row As UltraGridRow) As Boolean Implements IGroupByEvaluator.DoesGroupContainRow

          ' Get the related cell's value as a string.
          Dim cellValue As String = row.Cells(groupbyRow.Column).Value.ToString()

          ' If it is longer than 2 characters truncate it.
          If cellValue.Length > 2 Then
              cellValue = cellValue.Substring(0, 2)
          End If

          ' Do a case insensitive compare.
          Return 0 = String.Compare(groupbyRow.Value.ToString(), cellValue, True)
      End Function

  End Class

  Private Sub Button35_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles button35.Click

      ' Set the view style to OutlookGroupBy to enable the outlook-group-by feature.
      Me.UltraGrid1.DisplayLayout.ViewStyleBand = ViewStyleBand.OutlookGroupBy

      ' Get the CompanyName column.
      Dim column As UltraGridColumn = Me.UltraGrid1.DisplayLayout.Bands(0).Columns("CompanyName")

      ' Set the GroupByEvaluator on the column to an instance of MyGroupByEvaluator.
      column.GroupByEvaluator = New MyGroupByEvaluator()

      ' Set the column's HiddenWhenGroupBy property to false since we are
      ' grouping by the 1st 2 characters of each string we want the full
      ' company name to show in each row.
      column.HiddenWhenGroupBy = DefaultableBoolean.False

      ' Now group the rows by the column.
      Me.UltraGrid1.DisplayLayout.Bands(0).SortedColumns.Add(column, False, True)

  End Sub
using Infragistics.Shared;
using Infragistics.Win;
using Infragistics.Win.UltraWinGrid;
using System.Diagnostics;

public class MyGroupByEvaluator : Infragistics.Win.UltraWinGrid.IGroupByEvaluator
{
	public object GetGroupByValue( UltraGridGroupByRow groupbyRow, UltraGridRow row )
	{

		string val;
		
		// Get the default value from the groupbyRow.
		if (groupbyRow.Value == null )
			val = "";
		else
			val = groupbyRow.Value.ToString();
	
		// If it is longer than 2 characters truncate it.
		if ( val.Length > 2 )
			val = val.Substring( 0, 2 );
	
		// Convert the string to uppercase for display in the group-by row's description.
		return val.ToUpper();

	}
	
	public bool DoesGroupContainRow( UltraGridGroupByRow groupbyRow, UltraGridRow row )
	{

		// Get the related cell's value as a string.
		string cellValue = row.Cells[groupbyRow.Column].Value.ToString();
	
		// If it is longer than 2 characters truncate it.
		if ( cellValue.Length > 2 )
			cellValue = cellValue.Substring(0, 2);
	
		// Do a case insensitive compare.
		return 0 == string.Compare(groupbyRow.Value.ToString(), cellValue, true);
	}

}

private void button35_Click(object sender, System.EventArgs e)
{

	// Set the view style to OutlookGroupBy to enable the outlook-group-by feature.
	this.ultraGrid1.DisplayLayout.ViewStyleBand = ViewStyleBand.OutlookGroupBy;
	
	// Get the CompanyName column.
	UltraGridColumn column = this.ultraGrid1.DisplayLayout.Bands[0].Columns["CompanyName"];
	 
	// Set the GroupByEvaluator on the column to an instance of MyGroupByEvaluator 
	column.GroupByEvaluator = new MyGroupByEvaluator();
	 
	// Set the column's HiddenWhenGroupBy property to false since we are
	// grouping by the 1st 2 characters of each string we want the full
	// company name to show in each row.
	column.HiddenWhenGroupBy = DefaultableBoolean.False;

	// Now group the rows by the column.
	this.ultraGrid1.DisplayLayout.Bands[0].SortedColumns.Add( column, false, true );

}
参照