DataGridView用法合集(6):排序

目录

29. DataGridView行排序(点击列表头自动排序的设置)

30. DataGridView自动行排序(新追加值也会自动排序)

31. DataGridView自动行排序禁止情况下的排序

32. DataGridView指定列指定排序

29. DataGridView行排序(点击列表头自动排序的设置)

[VB.NET]

For Each c As DataGridViewColumn In DataGridView1.Columns

    c.SortMode = DataGridViewColumnSortMode.NotSortable

Next c

[C#]

foreach (DataGridViewColumn c in DataGridView1.Columns)

    c.SortMode = DataGridViewColumnSortMode.NotSortable;

30. DataGridView自动行排序(新追加值也会自动排序)

[VB.NET]

Private Sub Form1_Load(ByVal sender As System.Object, _
        ByVal e As System.EventArgs) Handles MyBase.Load
    Dim c As DataGridViewColumn
    For Each c In DataGridView1.Columns
        c.SortMode = DataGridViewColumnSortMode.Automatic
    Next c
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, _
        ByVal e As System.EventArgs) Handles Button1.Click
    If DataGridView1.CurrentCell Is Nothing Then
        Return
    End If
    Dim sortColumn As DataGridViewColumn = _
        DataGridView1.CurrentCell.OwningColumn
    Dim sortDirection As System.ComponentModel.ListSortDirection = _
        System.ComponentModel.ListSortDirection.Ascending
    If Not (DataGridView1.SortedColumn Is Nothing) AndAlso _
            DataGridView1.SortedColumn.Equals(sortColumn) Then
        sortDirection = IIf(DataGridView1.SortOrder = SortOrder.Ascending, _
            System.ComponentModel.ListSortDirection.Descending, _
            System.ComponentModel.ListSortDirection.Ascending)
    End If
    DataGridView1.Sort(sortColumn, sortDirection)
End Sub

[C#]

private void Form1_Load(object sender, EventArgs e)
{
    foreach (DataGridViewColumn c in DataGridView1.Columns)
        c.SortMode = DataGridViewColumnSortMode.Automatic;
}
private void Button1_Click(object sender, EventArgs e)
{
    if (DataGridView1.CurrentCell == null)
        return;
    DataGridViewColumn sortColumn = DataGridView1.CurrentCell.OwningColumn;
    ListSortDirection sortDirection = ListSortDirection.Ascending;
    if (DataGridView1.SortedColumn != null &&
        DataGridView1.SortedColumn.Equals(sortColumn))
    {
        sortDirection =
            DataGridView1.SortOrder == SortOrder.Ascending ?
            ListSortDirection.Descending : ListSortDirection.Ascending;
    }
    DataGridView1.Sort(sortColumn, sortDirection);
}

31. DataGridView自动行排序禁止情况下的排序

[VB.NET]

Private Sub DataGridView1_ColumnHeaderMouseClick(ByVal sender As Object, _
        ByVal e As DataGridViewCellMouseEventArgs) _
        Handles DataGridView1.ColumnHeaderMouseClick
    Dim clickedColumn As DataGridViewColumn = _
        DataGridView1.Columns(e.ColumnIndex)
    If clickedColumn.SortMode <> DataGridViewColumnSortMode.Automatic Then
        Me.SortRows(clickedColumn, True)
    End If
End Sub
Private Sub DataGridView1_RowsAdded(ByVal sender As Object, _
        ByVal e As DataGridViewRowsAddedEventArgs) _
        Handles DataGridView1.RowsAdded
    Me.SortRows(DataGridView1.SortedColumn, False)
End Sub
Private Sub DataGridView1_CellValueChanged(ByVal sender As Object, _
        ByVal e As DataGridViewCellEventArgs) _
        Handles DataGridView1.CellValueChanged
    If Not (DataGridView1.SortedColumn Is Nothing) AndAlso _
        e.ColumnIndex = DataGridView1.SortedColumn.Index Then
        Me.SortRows(DataGridView1.SortedColumn, False)
    End If
End Sub
Private Sub SortRows(ByVal sortColumn As DataGridViewColumn, _
        ByVal orderToggle As Boolean)
    If sortColumn Is Nothing Then
        Return
    End If
    If sortColumn.SortMode = DataGridViewColumnSortMode.Programmatic AndAlso _
        Not (DataGridView1.SortedColumn Is Nothing) AndAlso _
        Not DataGridView1.SortedColumn.Equals(sortColumn) Then
        DataGridView1.SortedColumn.HeaderCell.SortGlyphDirection = _
            SortOrder.None
    End If
    Dim sortDirection As System.ComponentModel.ListSortDirection
    If orderToggle Then
        sortDirection = IIf(DataGridView1.SortOrder = SortOrder.Descending, _
            System.ComponentModel.ListSortDirection.Ascending, _
            System.ComponentModel.ListSortDirection.Descending)
    Else
        sortDirection = IIf(DataGridView1.SortOrder = SortOrder.Descending, _
            System.ComponentModel.ListSortDirection.Descending, _
            System.ComponentModel.ListSortDirection.Ascending)
    End If
    Dim sOrder As SortOrder = _
        IIf(sortDirection = System.ComponentModel.ListSortDirection.Ascending, _
            SortOrder.Ascending, SortOrder.Descending)
    DataGridView1.Sort(sortColumn, sortDirection)
    If sortColumn.SortMode = DataGridViewColumnSortMode.Programmatic Then
        sortColumn.HeaderCell.SortGlyphDirection = sOrder
    End If
End Sub

[C#]

private void Form1_Load(object sender, EventArgs e)
{
    DataGridView1.RowsAdded += new DataGridViewRowsAddedEventHandler(
        DataGridView1_RowsAdded);
    DataGridView1.CellValueChanged += new DataGridViewCellEventHandler(
        DataGridView1_CellValueChanged);
    DataGridView1.ColumnHeaderMouseClick += new DataGridViewCellMouseEventHandler(
        DataGridView1_ColumnHeaderMouseClick);
}
private void DataGridView1_ColumnHeaderMouseClick(object sender,
    DataGridViewCellMouseEventArgs e)
{
    DataGridViewColumn clickedColumn = DataGridView1.Columns[e.ColumnIndex];
    if (clickedColumn.SortMode != DataGridViewColumnSortMode.Automatic)
        this.SortRows(clickedColumn, true);
}
private void DataGridView1_RowsAdded(object sender,
    DataGridViewRowsAddedEventArgs e)
{
    this.SortRows(DataGridView1.SortedColumn, false);
}
private void DataGridView1_CellValueChanged(object sender,
    DataGridViewCellEventArgs e)
{
    if (DataGridView1.SortedColumn != null &&
        e.ColumnIndex == DataGridView1.SortedColumn.Index)
        this.SortRows(DataGridView1.SortedColumn, false);
}
private void SortRows(DataGridViewColumn sortColumn, bool orderToggle)
{
    if (sortColumn == null)
        return;
    if (sortColumn.SortMode == DataGridViewColumnSortMode.Programmatic &&
        DataGridView1.SortedColumn != null &&
        !DataGridView1.SortedColumn.Equals(sortColumn))
    {
        DataGridView1.SortedColumn.HeaderCell.SortGlyphDirection =
            SortOrder.None;
    }
    ListSortDirection sortDirection;
    if (orderToggle)
    {
        sortDirection =
            DataGridView1.SortOrder == SortOrder.Descending ?
            ListSortDirection.Ascending : ListSortDirection.Descending;
    }
    else
    {
        sortDirection =
            DataGridView1.SortOrder == SortOrder.Descending ?
            ListSortDirection.Descending : ListSortDirection.Ascending;
    }
    SortOrder sortOrder =
        sortDirection == ListSortDirection.Ascending ?
        SortOrder.Ascending : SortOrder.Descending;
    DataGridView1.Sort(sortColumn, sortDirection);
    if (sortColumn.SortMode == DataGridViewColumnSortMode.Programmatic)
    {
        sortColumn.HeaderCell.SortGlyphDirection = sortOrder;
    }
}

32. DataGridView指定列指定排序

[VB.NET]

Dim dt As DataTable = CType(DataGridView1.DataSource, DataTable)
Dim dv As DataView = dt.DefaultView
dv.Sort = "Column1, Column2 ASC"
DataGridView1.Columns("Column1").HeaderCell.SortGlyphDirection = _
    SortOrder.Ascending
DataGridView1.Columns("Column2").HeaderCell.SortGlyphDirection = _
    SortOrder.Ascending

[C#]

DataTable dt = (DataTable)DataGridView1.DataSource;
DataView dv = dt.DefaultView;
dv.Sort = "Column1, Column2 ASC";
DataGridView1.Columns["Column1"].HeaderCell.SortGlyphDirection =
    SortOrder.Ascending;
DataGridView1.Columns["Column2"].HeaderCell.SortGlyphDirection =
    SortOrder.Ascending;

 欢迎微信技术交流:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xwLink1996

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值