按文本而不是值对Datagridview的列进行排序

Mal*_*ist 2 .net c# winforms

我的datagridview中有一个列是一个组合框列.我想按它的显示值(即文本)而不是它的值(在这种情况下,来自数据库的int列表)进行排序.

我怎样才能做到这一点?

mni*_*eld 5

您可以通过覆盖以下SortCompare事件来执行DataGridView此操作:

在DataGridView比较两个单元格值以执行排序操作时发生

并始终按显示值而不是默认值排序.

  1. SortCompare事件连接到DataGridView,如下所示:
this.dataGridView1.SortCompare += new DataGridViewSortCompareEventHandler(dataGridView1_SortCompare);
Run Code Online (Sandbox Code Playgroud)
  1. 然后添加事件处理每一对所有列进行排序CellFormattedValue属性,而不是Value财产(这是默认值).
void dataGridView1_SortCompare(object sender, DataGridViewSortCompareEventArgs e)
{
    var dgv = (DataGridView) sender
    string value1 = dgv.Rows[e.RowIndex1].Cells[e.Column.Index].FormattedValue.ToString();
    string value2 = dgv.Rows[e.RowIndex2].Cells[e.Column.Index].FormattedValue.ToString();

    e.SortResult = System.String.Compare(value1, value2);
    e.Handled = true;
}
Run Code Online (Sandbox Code Playgroud)

适合我,希望能帮助其他人.我只是希望有一个设置DataGridView,使其成为默认选项.

  • "仅当未设置DataSource属性且VirtualMode属性值为false时才会发生此事件." - 如果D ataGridView绑定了,那就没用了!http://msdn.microsoft.com/en-us/library/system.windows.forms.datagridview.sortcompare.aspx (2认同)