DataGridView.Sort Methode
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Sortiert den Inhalt des DataGridView Steuerelements.
Überlädt
| Name | Beschreibung |
|---|---|
| Sort(IComparer) |
Sortiert den Inhalt des DataGridView Steuerelements mithilfe einer Implementierung der IComparer Schnittstelle. |
| Sort(DataGridViewColumn, ListSortDirection) |
Sortiert den Inhalt des DataGridView Steuerelements in aufsteigender oder absteigender Reihenfolge basierend auf dem Inhalt der angegebenen Spalte. |
Sort(IComparer)
- Quelle:
- DataGridView.Methods.cs
- Quelle:
- DataGridView.Methods.cs
- Quelle:
- DataGridView.Methods.cs
- Quelle:
- DataGridView.Methods.cs
- Quelle:
- DataGridView.Methods.cs
Sortiert den Inhalt des DataGridView Steuerelements mithilfe einer Implementierung der IComparer Schnittstelle.
public:
virtual void Sort(System::Collections::IComparer ^ comparer);
public virtual void Sort(System.Collections.IComparer comparer);
abstract member Sort : System.Collections.IComparer -> unit
override this.Sort : System.Collections.IComparer -> unit
Public Overridable Sub Sort (comparer As IComparer)
Parameter
- comparer
- IComparer
Eine Implementierung, die IComparer den benutzerdefinierten Sortiervorgang ausführt.
Ausnahmen
comparer ist null.
Beispiele
Im folgenden Codebeispiel wird die Verwendung der Methodenüberladung in einem Szenario für die Sort Sortierung mehrerer Spalten veranschaulicht. In diesem Beispiel wird die IComparer Schnittstelle in der RowComparer Klasse implementiert.
private void Button1_Click( object sender, EventArgs e )
{
if ( RadioButton1.Checked)
{
DataGridView1.Sort( new RowComparer( SortOrder.Ascending ) );
}
else if ( RadioButton2.Checked)
{
DataGridView1.Sort( new RowComparer( SortOrder.Descending ) );
}
}
private class RowComparer : System.Collections.IComparer
{
private static int sortOrderModifier = 1;
public RowComparer(SortOrder sortOrder)
{
if (sortOrder == SortOrder.Descending)
{
sortOrderModifier = -1;
}
else if (sortOrder == SortOrder.Ascending)
{
sortOrderModifier = 1;
}
}
public int Compare(object x, object y)
{
DataGridViewRow DataGridViewRow1 = (DataGridViewRow)x;
DataGridViewRow DataGridViewRow2 = (DataGridViewRow)y;
// Try to sort based on the Last Name column.
int CompareResult = System.String.Compare(
DataGridViewRow1.Cells[1].Value.ToString(),
DataGridViewRow2.Cells[1].Value.ToString());
// If the Last Names are equal, sort based on the First Name.
if ( CompareResult == 0 )
{
CompareResult = System.String.Compare(
DataGridViewRow1.Cells[0].Value.ToString(),
DataGridViewRow2.Cells[0].Value.ToString());
}
return CompareResult * sortOrderModifier;
}
}
Private Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs) _
Handles Button1.Click
If RadioButton1.Checked = True Then
DataGridView1.Sort(New RowComparer(SortOrder.Ascending))
ElseIf RadioButton2.Checked = True Then
DataGridView1.Sort(New RowComparer(SortOrder.Descending))
End If
End Sub
Private Class RowComparer
Implements System.Collections.IComparer
Private sortOrderModifier As Integer = 1
Public Sub New(ByVal sortOrder As SortOrder)
If sortOrder = sortOrder.Descending Then
sortOrderModifier = -1
ElseIf sortOrder = sortOrder.Ascending Then
sortOrderModifier = 1
End If
End Sub
Public Function Compare(ByVal x As Object, ByVal y As Object) As Integer _
Implements System.Collections.IComparer.Compare
Dim DataGridViewRow1 As DataGridViewRow = CType(x, DataGridViewRow)
Dim DataGridViewRow2 As DataGridViewRow = CType(y, DataGridViewRow)
' Try to sort based on the Last Name column.
Dim CompareResult As Integer = System.String.Compare( _
DataGridViewRow1.Cells(1).Value.ToString(), _
DataGridViewRow2.Cells(1).Value.ToString())
' If the Last Names are equal, sort based on the First Name.
If CompareResult = 0 Then
CompareResult = System.String.Compare( _
DataGridViewRow1.Cells(0).Value.ToString(), _
DataGridViewRow2.Cells(0).Value.ToString())
End If
Return CompareResult * sortOrderModifier
End Function
End Class
Hinweise
Diese Methode ermöglicht eine erweiterte Anpassung des Sortierfeatures der DataGridView Klasse. Um einen stark angepassten Sortiervorgang zu implementieren, können Sie einen Ereignishandler für das ColumnHeaderMouseClick Ereignis schreiben und diese Methode mit einer Instanz einer Klasse aufrufen, die die System.Collections.IComparer Schnittstelle als Parameter implementiert. In diesem Fall legen Sie die Eigenschaft in der DataGridViewColumn.SortMode Regel so fest, dass DataGridViewColumnSortMode.Programmatic die automatische Sortierung deaktiviert und Platz für eine Sortierglyphe bleibt. Beim Sortieren nach Spalten, die auf den programmgesteuerten Sortiermodus festgelegt sind, müssen Sie die Sortierglyphe selbst anzeigen, indem Sie die DataGridViewColumnHeaderCell.SortGlyphDirection Eigenschaft festlegen.
Diese Methode funktioniert nur, wenn die DataSource Eigenschaft nicht festgelegt ist. Wenn Sie das DataGridView Steuerelement an eine externe Datenquelle binden, müssen Sie die sortiervorgänge verwenden, die von dieser Datenquelle bereitgestellt werden. Wenn Sie Ihre eigene Datenquelle bereitstellen, indem Sie den virtuellen Modus implementieren, müssen Sie auch die Sortiervorgänge selbst behandeln.
Durch Aufrufen dieser Methode wird die CurrentCell Eigenschaft automatisch auf null.
Weitere Informationen
Gilt für:
Sort(DataGridViewColumn, ListSortDirection)
- Quelle:
- DataGridView.Methods.cs
- Quelle:
- DataGridView.Methods.cs
- Quelle:
- DataGridView.Methods.cs
- Quelle:
- DataGridView.Methods.cs
- Quelle:
- DataGridView.Methods.cs
Sortiert den Inhalt des DataGridView Steuerelements in aufsteigender oder absteigender Reihenfolge basierend auf dem Inhalt der angegebenen Spalte.
public:
virtual void Sort(System::Windows::Forms::DataGridViewColumn ^ dataGridViewColumn, System::ComponentModel::ListSortDirection direction);
public virtual void Sort(System.Windows.Forms.DataGridViewColumn dataGridViewColumn, System.ComponentModel.ListSortDirection direction);
abstract member Sort : System.Windows.Forms.DataGridViewColumn * System.ComponentModel.ListSortDirection -> unit
override this.Sort : System.Windows.Forms.DataGridViewColumn * System.ComponentModel.ListSortDirection -> unit
Public Overridable Sub Sort (dataGridViewColumn As DataGridViewColumn, direction As ListSortDirection)
Parameter
- dataGridViewColumn
- DataGridViewColumn
Die Spalte, nach der der Inhalt der Datei DataGridViewsortiert werden soll.
- direction
- ListSortDirection
Einer der ListSortDirection Werte.
Ausnahmen
Die angegebene Spalte ist nicht Teil dieser DataGridViewSpalte.
- oder -
Die DataSource Eigenschaft wurde festgelegt, und die IsDataBound Eigenschaft der angegebenen Spalte gibt zurück false.
dataGridViewColumn ist null.
Die VirtualMode Eigenschaft wird festgelegt true und die IsDataBound Eigenschaft der angegebenen Spalte wird zurückgegeben false.
- oder -
Das durch die DataSource Eigenschaft angegebene Objekt implementiert die IBindingList Schnittstelle nicht.
- oder -
Das durch die DataSource Eigenschaft angegebene Objekt weist einen SupportsSorting Eigenschaftswert von false.
Beispiele
Im folgenden Codebeispiel wird die Verwendung der Sort programmgesteuerten Sortierung veranschaulicht.
private void sortButton_Click(object sender, System.EventArgs e)
{
// Check which column is selected, otherwise set NewColumn to null.
DataGridViewColumn newColumn =
dataGridView1.Columns.GetColumnCount(
DataGridViewElementStates.Selected) == 1 ?
dataGridView1.SelectedColumns[0] : null;
DataGridViewColumn oldColumn = dataGridView1.SortedColumn;
ListSortDirection direction;
// If oldColumn is null, then the DataGridView is not currently sorted.
if (oldColumn != null)
{
// Sort the same column again, reversing the SortOrder.
if (oldColumn == newColumn &&
dataGridView1.SortOrder == SortOrder.Ascending)
{
direction = ListSortDirection.Descending;
}
else
{
// Sort a new column and remove the old SortGlyph.
direction = ListSortDirection.Ascending;
oldColumn.HeaderCell.SortGlyphDirection = SortOrder.None;
}
}
else
{
direction = ListSortDirection.Ascending;
}
// If no column has been selected, display an error dialog box.
if (newColumn == null)
{
MessageBox.Show("Select a single column and try again.",
"Error: Invalid Selection", MessageBoxButtons.OK,
MessageBoxIcon.Error);
}
else
{
dataGridView1.Sort(newColumn, direction);
newColumn.HeaderCell.SortGlyphDirection =
direction == ListSortDirection.Ascending ?
SortOrder.Ascending : SortOrder.Descending;
}
}
Private Sub SortButton_Click(ByVal sender As Object, _
ByVal e As EventArgs) Handles sortButton.Click
' Check which column is selected, otherwise set NewColumn to Nothing.
Dim newColumn As DataGridViewColumn
If dataGridView1.Columns.GetColumnCount(DataGridViewElementStates _
.Selected) = 1 Then
newColumn = dataGridView1.SelectedColumns(0)
Else
newColumn = Nothing
End If
Dim oldColumn As DataGridViewColumn = dataGridView1.SortedColumn
Dim direction As ListSortDirection
' If oldColumn is null, then the DataGridView is not currently sorted.
If oldColumn IsNot Nothing Then
' Sort the same column again, reversing the SortOrder.
If oldColumn Is newColumn AndAlso dataGridView1.SortOrder = _
SortOrder.Ascending Then
direction = ListSortDirection.Descending
Else
' Sort a new column and remove the old SortGlyph.
direction = ListSortDirection.Ascending
oldColumn.HeaderCell.SortGlyphDirection = SortOrder.None
End If
Else
direction = ListSortDirection.Ascending
End If
' If no column has been selected, display an error dialog box.
If newColumn Is Nothing Then
MessageBox.Show("Select a single column and try again.", _
"Error: Invalid Selection", MessageBoxButtons.OK, _
MessageBoxIcon.Error)
Else
dataGridView1.Sort(newColumn, direction)
If direction = ListSortDirection.Ascending Then
newColumn.HeaderCell.SortGlyphDirection = SortOrder.Ascending
Else
newColumn.HeaderCell.SortGlyphDirection = SortOrder.Descending
End If
End If
End Sub
Hinweise
Diese Methode sortiert den Inhalt des Inhalts, DataGridView indem Werte in der angegebenen Spalte verglichen werden. Standardmäßig verwendet der Sortiervorgang die Compare Methode, um Zellpaare in der Spalte mithilfe der DataGridViewCell.Value Eigenschaft zu vergleichen.
Bei Spalten, auf die die SortMode Eigenschaft festgelegt ist DataGridViewColumnSortMode.Automatic, werden die SortedColumn Eigenschaften SortOrder automatisch festgelegt, und die entsprechende Sortierglyphe wird angezeigt. Bei Spalten, auf die die SortMode Eigenschaft festgelegt ist DataGridViewColumnSortMode.Programmatic, müssen Sie die Sortierglyphe selbst über die DataGridViewColumnHeaderCell.SortGlyphDirection Eigenschaft anzeigen.
Sie können den von dieser Methode verwendeten Sortiervorgang anpassen, indem Sie das SortCompare Ereignis behandeln. Dieses Ereignis tritt nur auf, wenn die DataSource Eigenschaft nicht festgelegt wurde.
Wenn die DataSource Eigenschaft festgelegt wurde, funktioniert diese Methode nur für datengebundene Spalten. Datengebundene Spalten haben ihren DataGridViewColumn.DataPropertyName Eigenschaftensatz festgelegt. Dies bewirkt, dass die DataGridViewColumn.IsDataBound Eigenschaft zurückgegeben truewird.
Wenn Ihr DataGridView Steuerelement sowohl gebundene als auch ungebundene Spalten enthält, müssen Sie den virtuellen Modus implementieren, um die Werte der ungebundenen Spalten beizubehalten, wenn das Steuerelement nach einer gebundenen Spalte sortiert wird. Sie können dies tun, indem Sie die VirtualMode Eigenschaft auf true das Ereignis festlegen und das CellValueNeeded Ereignis behandeln. Wenn die Spalte bearbeitbar ist, sollten Sie auch das CellValuePushed Ereignis behandeln. Weitere Informationen zum virtuellen Modus finden Sie unter How to: Implement Virtual Mode in the Windows Forms DataGridView Control. Das Sortieren nach ungebundenen Spalten, wenn das Steuerelement datengebunden ist, wird nicht unterstützt.