PowerTools SPREAD for ASP.NET 8.0J
GroupComparer プロパティ (GroupDataModel)

グループ比較子を取得します。
構文
'Declaration
 
Public ReadOnly Property GroupComparer As IComparer
public IComparer GroupComparer {get;}

プロパティ値

比較子を含むIComparerオブジェクト
次のサンプル コードは、指定したインデックスから値を取得します。
private int GetYear(DateTime value)
{
    return value.Year;
}

private int GetDecade(DateTime value)
{
    int x = 0;
    x = value.Year % 10;
    x = value.Year - x;
    return x;
}

void FpSpread1_Grouping(object sender, GroupingEventArgs e)
{
    int c = e.SortInfo.Index;
    FarPoint.Web.Spread.FpSpread ss = (FarPoint.Web.Spread.FpSpread)sender;
    FarPoint.Web.Spread.Model.DefaultSheetDataModel dm;
    if ((ss.ActiveSheetView.DataModel) is FarPoint.Web.Spread.Model.DefaultSheetDataModel)
    {
        dm = (FarPoint.Web.Spread.Model.DefaultSheetDataModel)ss.ActiveSheetView.DataModel;
    }
    else
    {
        dm = (FarPoint.Web.Spread.Model.DefaultSheetDataModel)((FarPoint.Web.Spread.Model.GroupDataModel)ss.ActiveSheetView.DataModel).TargetModel;
    }

    c = dm.GetDataColumnFromModelColumn(c);
    if (dm.GetDataView().Table.Columns[c].DataType.Equals(typeof(DateTime)))
    {
        if ((dm.GetDataView().Table.Columns[c].Caption.IndexOf("Birth") >= 0))
        {
            e.GroupComparer = new MyGroupComparer1(true);
        }
        else
        {
            e.GroupComparer = new MyGroupComparer1(false);
        }
    }
}

void FpSpread1_Grouped(object sender, EventArgs e)
{
    FarPoint.Web.Spread.FpSpread ss = (FarPoint.Web.Spread.FpSpread)sender;
    FarPoint.Web.Spread.Model.GroupDataModel gm;
    if ((ss.ActiveSheetView.DataModel) is FarPoint.Web.Spread.Model.GroupDataModel)
    {
        gm = (FarPoint.Web.Spread.Model.GroupDataModel)ss.ActiveSheetView.DataModel;
        if ((gm.GroupComparer) is MyGroupComparer1)
        {
            int i;
            for (i = 0; i <= ss.ActiveSheetView.RowCount - 1; i++)
            {
                if (gm.IsGroup(i))
                {
                FarPoint.Web.Spread.Model.Group g;
                g = gm.GetGroup(i);
                    if ((g.Rows[0]) is int & !(gm.IsEditable(i, g.Column))) 
                    {
                        string s = ss.ActiveSheetView.GetColumnLabel(0, ss.ActiveSheetView.GetViewColumnFromModelColumn(g.Column));
                        if (s.IndexOf("Birth") >= 0)
                        {
                            g.Text = s + ": " + GetDecade((DateTime)gm.TargetModel.GetValue((int)g.Rows[0], g.Column)) + "s";
                        }
                        else
                        {
                            g.Text = s + ": " + GetYear((DateTime)gm.TargetModel.GetValue((int)g.Rows[0], g.Column));
                        }
                    }
                }
            }
        }
    }
}

[Serializable()]
public class MyGroupComparer1 : IComparer
{
    private bool birthDate = true;

    public MyGroupComparer1(bool bd)
    {
        birthDate = bd;
    }

    public int Compare(object x1, object y1)
    {
        int x;
        int y;
        x = 0;
        y = 0;
        if (birthDate)
        {
            if ((x1) is DateTime)
            {
                x = ((DateTime)(x1)).Year % 10;
                x = ((DateTime)(x1)).Year - x;
            }
            if ((y1) is DateTime)
            {
                y = ((DateTime)(y1)).Year % 10;
                y = ((DateTime)(y1)).Year - y;
            }
        }
        else
        {
            if ((x1) is DateTime)
            {
                x = ((DateTime)(x1)).Year;
            }
            if ((y1) is DateTime)
            {
                y = ((DateTime)(y1)).Year;
            }
        }
        if (x == y)
        {
            return 0;
        }
        else if (x > y)
        {
            return 1;
        }
        else
        {
            return -1;
        }
    }
}
Private Function GetYear(ByVal value As DateTime) As Integer
    Return value.Year
End Function

Private Function GetDecade(ByVal value As DateTime) As Integer
    Dim x As Integer = 0
    x = value.Year Mod 10
    x = value.Year - x
    Return x
End Function

Protected Sub FpSpread1_Grouped(ByVal sender As Object, ByVal e As System.EventArgs) Handles FpSpread1.Grouped
    Dim ss As FarPoint.Web.Spread.FpSpread = sender
    Dim gm As FarPoint.Web.Spread.Model.GroupDataModel
    If TypeOf (ss.ActiveSheetView.DataModel) Is FarPoint.Web.Spread.Model.GroupDataModel Then
        gm = ss.ActiveSheetView.DataModel
        If TypeOf (gm.GroupComparer) Is MyGroupComparer Then
            Dim i As Integer
            For i = 0 To ss.ActiveSheetView.RowCount - 1
                If gm.IsGroup(i) Then
                    Dim g As FarPoint.Web.Spread.Model.Group
                    g = gm.GetGroup(i)
If TypeOf (g.Rows(0)) Is Integer And Not gm.IsEditable(i, g.Column) Is Integer Then
                        Dim s As String = ss.ActiveSheetView.GetColumnLabel(0, ss.ActiveSheetView.GetViewColumnFromModelColumn(g.Column))
                        If s.IndexOf("Birth") >= 0 Then
                            g.Text = s & ": " & GetDecade(gm.TargetModel.GetValue(g.Rows(0), g.Column)) & "s"
                        Else
                            g.Text = s & ": " & GetYear(gm.TargetModel.GetValue(g.Rows(0), g.Column))
                        End If
                    End If
                End If
            Next
        End If
    End If
End Sub

Protected Sub FpSpread1_Grouping(ByVal sender As Object, ByVal e As FarPoint.Web.Spread.GroupingEventArgs) Handles FpSpread1.Grouping
    Dim c As Integer = e.SortInfo.Index
    Dim ss As FarPoint.Web.Spread.FpSpread = sender
    Dim dm As FarPoint.Web.Spread.Model.DefaultSheetDataModel
    If TypeOf (ss.ActiveSheetView.DataModel) Is FarPoint.Web.Spread.Model.DefaultSheetDataModel Then
        dm = ss.ActiveSheetView.DataModel
    Else
        dm = CType(ss.ActiveSheetView.DataModel, FarPoint.Web.Spread.Model.GroupDataModel).TargetModel
    End If

    c = dm.GetDataColumnFromModelColumn(c)
    If dm.GetDataView().Table.Columns(c).DataType.Equals(GetType(DateTime)) Then
        If dm.GetDataView().Table.Columns(c).Caption.IndexOf("Birth") >= 0 Then
            e.GroupComparer = New MyGroupComparer(True)
        Else
            e.GroupComparer = New MyGroupComparer(False)
        End If
    End If
End Sub

<Serializable()> _
Public Class MyGroupComparer
    Implements IComparer

    Private birthDate As Boolean = True
    Public Sub New(ByVal bd As Boolean)
        birthDate = bd
    End Sub

    Public Function Compare(ByVal x1 As Object, ByVal y1 As Object) As Integer Implements System.Collections.IComparer.Compare

        Dim x, y As Integer
        x = 0
        y = 0

        If birthDate Then
            If TypeOf (x1) Is DateTime Then
                x = CType(x1, DateTime).Year Mod 10
                x = CType(x1, DateTime).Year - x
            End If
            If TypeOf (y1) Is DateTime Then
                y = CType(y1, DateTime).Year Mod 10
                y = CType(y1, DateTime).Year - y
            End If
        Else
            If TypeOf (x1) Is DateTime Then
                x = CType(x1, DateTime).Year
            End If
            If TypeOf (y1) Is DateTime Then
                y = CType(y1, DateTime).Year
            End If
        End If

        If x = y Then
            Return 0
        ElseIf x > y Then
            Return 1
        Else
            Return -1
        End If
    End Function

End Class

参照

GroupDataModel クラス
GroupDataModel メンバ

 

 


© 2003-2015, GrapeCity inc. All rights reserved.