DataGridView.Sort Yöntem

Tanım

Denetimin içeriğini DataGridView sıralar.

Aşırı Yüklemeler

Sort(IComparer)

Arabirimin DataGridView bir uygulamasını kullanarak denetimin IComparer içeriğini sıralar.

Sort(DataGridViewColumn, ListSortDirection)

Denetimin içeriğini belirtilen sütunun DataGridView içeriğine göre artan veya azalan düzende sıralar.

Sort(IComparer)

Arabirimin DataGridView bir uygulamasını kullanarak denetimin IComparer içeriğini sıralar.

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)

Parametreler

comparer
IComparer

Özel sıralama işlemini gerçekleştiren bir uygulaması IComparer .

Özel durumlar

comparer, null değeridir.

VirtualMode olarak ayarlanır true.

-veya-

DataSource değildir null.

Örnekler

Aşağıdaki kod örneği, birden çok sütun sıralama senaryosunda yöntem aşırı yüklemesinin Sort nasıl kullanılacağını gösterir. Bu örnekte arabirimi IComparer sınıfında uygulanır RowComparer .

private void Button1_Click( object sender, EventArgs e )
{
    if ( RadioButton1.Checked == true )
    {
        DataGridView1.Sort( new RowComparer( SortOrder.Ascending ) );
    }
    else if ( RadioButton2.Checked == true )
    {
        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

Açıklamalar

Bu yöntem, sınıfın sıralama özelliğinin gelişmiş özelleştirmesine DataGridView olanak tanır. Yüksek oranda özelleştirilmiş bir sıralama işlemi uygulamak için, olay için ColumnHeaderMouseClick bir olay işleyicisi yazabilir ve arabirimini parametre olarak uygulayan System.Collections.IComparer bir sınıfın örneğiyle bu yöntemi çağırabilirsiniz. Bu durumda, otomatik sıralamayı DataGridViewColumn.SortMode devre dışı bırakmak ve sıralama karakterine yer bırakmak için özelliğini DataGridViewColumnSortMode.Programmatic olarak ayarlarsınız. Programlı sıralama moduna ayarlanmış sütunlara göre sıralama yaparken, özelliği ayarlayarak DataGridViewColumnHeaderCell.SortGlyphDirection sıralama karakterinizi kendiniz görüntülemeniz gerekir.

Bu yöntem yalnızca özelliği ayarlanmadığında DataSource çalışır. Denetimi bir dış veri kaynağına bağladığınızda DataGridView , bu veri kaynağı tarafından sağlanan sıralama işlemlerini kullanmanız gerekir. Sanal mod uygulayarak kendi veri kaynağınızı sağladığınızda, sıralama işlemlerini de kendiniz işlemeniz gerekir.

Bu yöntemin çağrılması CurrentCell , özelliğini otomatik olarak olarak nullayarlar.

Ayrıca bkz.

Şunlara uygulanır

Sort(DataGridViewColumn, ListSortDirection)

Denetimin içeriğini belirtilen sütunun DataGridView içeriğine göre artan veya azalan düzende sıralar.

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)

Parametreler

dataGridViewColumn
DataGridViewColumn

içeriğinin DataGridViewsıralandığı sütun.

direction
ListSortDirection

Değerlerden ListSortDirection biri.

Özel durumlar

Belirtilen sütun bu DataGridViewöğesinin bir parçası değil.

-veya-

DataSource özelliği ayarlandı ve IsDataBound belirtilen sütunun özelliği döndürürfalse.

dataGridViewColumn, null değeridir.

VirtualMode özelliği olarak true ayarlanır ve IsDataBound belirtilen sütunun özelliği döndürürfalse.

-veya-

özelliği tarafından DataSource belirtilen nesne arabirimini IBindingList uygulamaz.

-veya-

özelliği tarafından belirtilen nesnenin DataSource özellik değeri vardır SupportsSortingfalse.

Örnekler

Aşağıdaki kod örneği, programlı sıralamada öğesinin Sort nasıl kullanılacağını gösterir.

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

Açıklamalar

Bu yöntem, belirtilen sütundaki değerleri karşılaştırarak içeriğini DataGridView sıralar. Varsayılan olarak, sıralama işlemi özelliğini kullanarak DataGridViewCell.Value sütundaki hücre çiftlerini karşılaştırmak için yöntemini kullanırCompare.

özelliği olarak DataGridViewColumnSortMode.AutomaticSortedColumn ayarlanmış sütunlar SortMode için ve SortOrder özellikleri otomatik olarak ayarlanır ve uygun sıralama karakteri görüntülenir. özelliği olarak ayarlanmış DataGridViewColumnSortMode.Programmaticsütunlar SortMode için sıralama karakterinizi özelliği aracılığıyla DataGridViewColumnHeaderCell.SortGlyphDirection görüntülemeniz gerekir.

Olayı işleyerek SortCompare bu yöntem tarafından kullanılan sıralama işlemini özelleştirebilirsiniz. Bu olay yalnızca özelliği ayarlanmadığında DataSource gerçekleşir.

DataSource Özelliği ayarlandığında, bu yöntem yalnızca veriye bağlı sütunlar için çalışır. Veriye bağlı sütunların DataGridViewColumn.DataPropertyName özellikleri ayarlanmıştır. Bu, özelliğinin DataGridViewColumn.IsDataBound döndürmesine trueneden olur.

Denetiminiz DataGridView hem ilişkili hem de ilişkisiz sütunlar içeriyorsa, denetim ilişkili sütuna göre sıralandığında ilişkisiz sütunların değerlerini korumak için sanal mod uygulamanız gerekir. Özelliğini true olarak ayarlayarak VirtualMode ve olayı işleyerek CellValueNeeded bunu yapabilirsiniz. Sütun düzenlenebilirse olayı da işlemeniz CellValuePushed gerekir. Sanal mod hakkında daha fazla bilgi için bkz. How to: Implement Virtual Mode in the Windows Forms DataGridView Control. Denetim veriye bağlı olduğunda ilişkisiz sütunlara göre sıralama desteklenmez.

Ayrıca bkz.

Şunlara uygulanır