ICatabarer对数据绑定Datagridview进行排序

时间:2012-08-24 17:06:51

标签: c# winforms datagridview

我有一个数据绑定的DataGridView,我试图使用IComparer进行排序。

当我尝试应用我的排序时,我收到此错误:

  

DataGridView控件是数据绑定的。控件无法使用比较器执行排序操作。

我的排序技术基于this link

仅供参考我试图通过使用其标记值来比较位图。

public int Compare(object x, object y)
{
    DataGridViewRow DataGridViewRow1 = (DataGridViewRow)x;
    DataGridViewRow DataGridViewRow2 = (DataGridViewRow)y;

    // Try to sort based on the tag 
    int CompareResult = System.String.Compare(
        DataGridViewRow1.Cells[1].Tag.ToString(),
        DataGridViewRow2.Cells[1].Tag.ToString());



    return CompareResult * sortOrderModifier;
}

1 个答案:

答案 0 :(得分:2)

据我所知,数据绑定DatagridView无法使用链接文章中显示的方法进行排序。

您要做的是对基础容器进行排序。如果您使用的是DataTable,则无法直接对其进行排序。

您可以使用Linq的OrderBy并将其传递给您的自定义比较器。之后,在linq查询上调用AsDataView()并将DataGridView绑定到此DataView。

这样的事情:

 RowComparer comp = new RowComparer();
 var query = northwindDataSet.Customers.AsEnumerable().OrderBy(q => q, comp);
 DataView dv = query.AsDataView();

 customersBindingSource.DataSource = dv;

请注意,我在此示例中使用的是DataTable和BindingSource,但您应该明白这一点: - )

希望这有帮助