【问题标题】:Column provided does not belong to this DataGridView control when calling Sort调用 Sort 时提供的列不属于此 DataGridView 控件
【发布时间】:2015-05-18 08:32:27
【问题描述】:

我有一个带有可排序列的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 成为一个不同它的名称相同并且包含相同类型的数据。如何实施解决方案?

【问题讨论】:

    标签: sorting datagridview


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多