DataGridView.Sort Yöntem
Tanım
Önemli
Bazı bilgiler ürünün ön sürümüyle ilgilidir ve sürüm öncesinde önemli değişiklikler yapılmış olabilir. Burada verilen bilgilerle ilgili olarak Microsoft açık veya zımni hiçbir garanti vermez.
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
Özel durumlar
comparer
, null
değeridir.
Ö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 null
ayarlar.
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 true
neden 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.