调用排序时提供的列不属于此 DataGridView 控件
Column provided does not belong to this DataGridView control when calling Sort
我有一个带有可排序列的 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
成为 不同一个,即使它的名称相同并且包含相同类型的数据。我该如何实施解决方案?
正如我在问题中假设的那样,直接使用 sortedColumn 的实例不起作用,因为它不再是网格的一部分。我改为使用列的名称,如下所示:
if ( !string.IsNullOrWhiteSpace( sortedColumn.Name ) &&
dgvMyData.Columns[ sortedColumn.Name ] != null )
{
dgvMyData.Sort(
dgvMyData.Columns[ sortedColumn.Name ],
listSortDirection );
}
我有一个带有可排序列的 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
成为 不同一个,即使它的名称相同并且包含相同类型的数据。我该如何实施解决方案?
正如我在问题中假设的那样,直接使用 sortedColumn 的实例不起作用,因为它不再是网格的一部分。我改为使用列的名称,如下所示:
if ( !string.IsNullOrWhiteSpace( sortedColumn.Name ) &&
dgvMyData.Columns[ sortedColumn.Name ] != null )
{
dgvMyData.Sort(
dgvMyData.Columns[ sortedColumn.Name ],
listSortDirection );
}