2017-09-01 2 views
0

Ich möchte benutzerdefinierte Sortierung in Infgragistics verwenden. Ich lese, dass ich IComparer verwenden kann.Benutzerdefinierte Sortierung in Infragistics

Ich habe eine UltraGridColumnd Bound mit String-Datentyp. Ich möchte nach Wert von einer anderen Spalte sortieren, die langen Datentyp ist.

Ist es möglich?

Antwort

2

Ja, das ist möglich und kann mit der IComparer-Schnittstelle exakt erreicht werden. Jede UltraGrid-Spalte verfügt über eine SortComparer-Eigenschaft, der ein Objekt zugewiesen werden kann, das die IComparer-Schnittstelle implementiert. Wie in der Dokumentation über die Immobilie SortComparer geschrieben:

Property verwendet, um benutzerdefinierten auszuführen Vergleiche sortieren, wenn Zeilen von in dieser Spalte zu sortieren. Die Werte, die in der Compare-Methode des IComparers übergeben werden, sind zwei UltraGridCell-Objekte.

Hier ist ein Codeschnipsel zu Ihrem Szenario, da die Vergleichswerte aus einer anderen Spalte stammen.

public partial class Form1 : Form 
{ 
    public Form1() 
    { 
     InitializeComponent(); 
    } 

    private void Form1_Load(object sender, EventArgs e) 
    { 
     ultraGrid1.DataSource = InitializeDataSource(10); 
     ultraGrid1.DisplayLayout.Override.HeaderClickAction = HeaderClickAction.SortMulti; 
     ultraGrid1.DisplayLayout.Bands[0].Columns[0].SortComparer = new CustomComparer(); 
    } 

    private DataTable InitializeDataSource(int rows) 
    { 
     DataTable table = new DataTable(); 

     table.Columns.Add("String Column", typeof(string)); 
     table.Columns.Add("Long Column", typeof(long)); 

     for (int index = 0; index < rows; index++) 
     { 
      table.Rows.Add(new object[] { "Text", index }); 
     } 

     return table; 
    } 
} 

public class CustomComparer : IComparer 
{ 
    public int Compare(object x, object y) 
    { 
     var valueColumn = "Long Column"; 
     var firstCell = x as UltraGridCell; 
     var secondCell = y as UltraGridCell; 

     var firstCellValue = (long)firstCell.Row.Cells[valueColumn].Value; 
     var secondCellValue = (long)secondCell.Row.Cells[valueColumn].Value; 

     if (firstCellValue == secondCellValue) 
     { 
      return 0; 
     } 
     else if (firstCellValue > secondCellValue) 
     { 
      return -1; 
     } 
     else 
     { 
      return 1; 
     } 
    } 
} 
Verwandte Themen