DataGridView.Sort 메서드
정의
중요
일부 정보는 릴리스되기 전에 상당 부분 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보에 대해 어떠한 명시적이거나 묵시적인 보증도 하지 않습니다.
DataGridView 컨트롤의 내용을 정렬합니다.
오버로드
Sort(IComparer) |
DataGridView 인터페이스의 구현을 사용하여 IComparer 컨트롤의 내용을 정렬합니다. |
Sort(DataGridViewColumn, ListSortDirection) |
지정된 열의 내용을 기준으로 DataGridView 컨트롤의 내용을 오름차순이나 내림차순으로 정렬합니다. |
Sort(IComparer)
DataGridView 인터페이스의 구현을 사용하여 IComparer 컨트롤의 내용을 정렬합니다.
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)
매개 변수
예외
comparer
이(가) null
인 경우
예제
다음 코드 예제에서는 여러 열 정렬 시나리오에서 메서드 오버로드를 사용하는 Sort 방법을 보여 줍니다. 이 예제에서 인터페이스는 IComparer 클래스에서 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
설명
이 메서드를 사용하면 클래스의 정렬 기능을 고급으로 사용자 지정할 수 DataGridView 있습니다. 고도로 사용자 지정된 정렬 작업을 구현하기 위해 이벤트에 대한 ColumnHeaderMouseClick 이벤트 처리기를 작성하고 인터페이스를 매개 변수로 구현하는 클래스의 instance 사용하여 이 메서드를 호출할 System.Collections.IComparer 수 있습니다. 이 경우 일반적으로 DataGridViewColumn.SortMode 설정 합니다 속성 DataGridViewColumnSortMode.Programmatic 자동 정렬을 사용 하지 않도록 설정 하 고 정렬 문자 모양에 대 한 공간을 둡니다. 프로그래밍 방식 정렬 모드로 설정된 열을 기준으로 정렬하는 경우 속성을 설정 DataGridViewColumnHeaderCell.SortGlyphDirection 하여 정렬 문자 모양을 직접 표시해야 합니다.
이 메서드는 속성이 DataSource 설정되지 않은 경우에만 작동합니다. 컨트롤을 DataGridView 외부 데이터 원본에 바인딩하는 경우 해당 데이터 원본에서 제공하는 정렬 작업을 사용해야 합니다. 가상 모드를 구현하여 사용자 고유의 데이터 원본을 제공하는 경우 정렬 작업도 직접 처리해야 합니다.
이 메서드를 호출하면 속성null
이 자동으로 로 CurrentCell 설정됩니다.
추가 정보
적용 대상
Sort(DataGridViewColumn, ListSortDirection)
지정된 열의 내용을 기준으로 DataGridView 컨트롤의 내용을 오름차순이나 내림차순으로 정렬합니다.
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)
매개 변수
- dataGridViewColumn
- DataGridViewColumn
DataGridView의 내용을 정렬할 기준이 되는 열입니다.
- direction
- ListSortDirection
ListSortDirection 값 중 하나입니다.
예외
dataGridViewColumn
이(가) null
인 경우
VirtualMode 속성이 true
로 설정되었으며 지정된 열의 IsDataBound 속성이 false
를 반환합니다.
또는
DataSource 속성에 의해 지정된 개체가 IBindingList 인터페이스를 구현하지 않는 경우
또는
DataSource 속성에 의해 지정된 개체에서 SupportsSorting 속성 값이 false
인 경우
예제
다음 코드 예제를 사용 Sort 하는 방법에 설명 합니다 프로그래밍 방식으로 정렬 합니다.
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
설명
이 메서드는 지정된 열의 값을 비교하여 의 DataGridView 내용을 정렬합니다. 기본적으로 정렬 작업은 메서드를 Compare 사용하여 속성을 사용하여 열의 셀 쌍을 DataGridViewCell.Value 비교합니다.
속성이 로 설정된 DataGridViewColumnSortMode.Automatic열의 SortModeSortedColumn 경우 및 SortOrder 속성이 자동으로 설정되고 적절한 정렬 문자 모양이 표시됩니다. 속성이 로 설정된 DataGridViewColumnSortMode.Programmatic열의 SortMode 경우 속성을 통해 DataGridViewColumnHeaderCell.SortGlyphDirection 정렬 문자 모양을 직접 표시해야 합니다.
이벤트를 처리하여 이 메서드에서 사용하는 정렬 작업을 사용자 지정할 수 있습니다 SortCompare . 이 이벤트는 속성이 DataSource 설정되지 않은 경우에만 발생합니다.
속성이 DataSource 설정된 경우 이 메서드는 데이터 바인딩된 열에 대해서만 작동합니다. 데이터 바인딩된 열에는 해당 속성 집합이 DataGridViewColumn.DataPropertyName 있습니다. 이렇게 하면 속성이 를 DataGridViewColumn.IsDataBound 반환 true
합니다.
DataGridView 컨트롤에 바인딩된 열과 언바운드 열이 모두 포함된 경우 컨트롤이 바인딩된 열로 정렬될 때 바인딩되지 않은 열의 값을 유지하기 위해 가상 모드를 구현해야 합니다. 속성을 로 설정하고 VirtualMode 이벤트를 처리하여 이 작업을 수행할 수 있습니다CellValueNeeded.true
열을 편집할 수 있는 경우 이벤트도 처리 CellValuePushed 해야 합니다. 가상 모드에 대한 자세한 내용은 방법: Windows Forms DataGridView 컨트롤에서 가상 모드 구현을 참조하세요. 컨트롤이 데이터 바인딩된 경우 바인딩되지 않은 열을 기준으로 정렬하는 것은 지원되지 않습니다.
추가 정보
적용 대상
.NET