1

IComparerを使用して並べ替えようとしているデータバインドされたDataGridViewがあります。

ソートを適用しようとすると、次のエラーが発生します。

DataGridViewコントロールはデータにバインドされています。コントロールは、比較プログラムを使用してソート操作を実行することはできません。

私のソート手法は、このリンクに基づいていました。

参考までに、タグ値を使用してビットマップを比較しようとしています。

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;
}
4

1 に答える 1

3

私の知る限り、データバインドされた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を使用していることに注意してください。ただし、アイデアを得る必要があります:-)

お役に立てれば

于 2012-08-24T20:17:51.407 に答える