调用Sort时,提供的列不属于此DataGridView控件

时间:2015-03-16 09:21:27

标签: sorting datagridview

我有DataGridViewControl可排列的列。编辑此控件的一行中的一条记录的数据后,将刷新记录列表并更新DataGridViewControl

m_Helper.UpdateRecord( some variables );
dgvMyData.DataSource = ReloadData();

在我这样做之前,我保存SortOrder和用于排序的列:

SortOrder sortOrder = dgvMyData.SortOrder;
DataGridViewColumn sortedColumn = dgvMyData.SortedColumn;

现在重新加载数据之后我想在预先选择的列上进行相同的排序,但我总是得到错误消息

提供的列不属于此DataGridView控件

相应的代码如下所示:

ListSortDirection listSortDirection;
if ( sortOrder == SortOrder.Ascending )
{
    listSortDirection = ListSortDirection.Ascending;
}
else
{
    listSortDirection = ListSortDirection.Descending;
}

dgvMyData.Sort( sortedColumn, listSortDirection );

这总是会导致ArgumentException出现上面显示的错误消息 - 我认为这是因为重新加载DataGridView的数据也会导致DataGridViewColumn不同< / em>一个即使它被称为相同并包含相同类型的数据。我该如何实施解决方案?

1 个答案:

答案 0 :(得分:0)

正如我的问题所假设的那样,直接使用sortedColumn的实例并不起作用,因为它不再是网格的一部分。我改为使用列的名称:

if ( !string.IsNullOrWhiteSpace( sortedColumn.Name ) && 
    dgvMyData.Columns[ sortedColumn.Name ] != null )
{
    dgvMyData.Sort(
        dgvMyData.Columns[ sortedColumn.Name ],
        listSortDirection );
}