更新DataGridView.DataSource后清除选择和滚动位置

时间:2018-08-12 19:07:04

标签: c# datagridview scroll datasource

大家好! 我们有两个带有数据的DataTable。第一个表包含原始数据集,在读取行时会将数据添加到原始数据集。第二个表正在工作,并且是所有可视化元素的数据源。可以将表分配给彼此,而无需进行操作。或者,您可以选择适用于第二个表的自定义数据过滤器。 现在,特别是在DataGridView上。在可用新数据的情况下,事件会调用一种主要形式的方法。好像一切正​​常,但是有一个“但是”。如果未应用任何过滤器,则即使有新数据可用,即仍然保留相同的滚动位置和相同的选择,表格也将被滚动。用户可以安静地滚动浏览表格并可以分析数据。但是,一旦用户对DataTabe中的数据应用了过滤器,就会出现一些奇怪的刷新。每次进行更新时,选择都会转到表的第一行,并且滚动位置会相应地重置,这使用户无法分析数据。

我将向您展示过滤器和分配方法。如果您需要显示填充物,但似乎没有具体内容。

private void ApplyFilters()
{
    var curentFilter = new Filter();
    try
    {
        if (_filtres.Any() == false) return;
        _reloader.DT_Filtred = _reloader.DT_Original;

        foreach (var filter in _filtres)
        {
            curentFilter = filter;
            var results = from DataRow myRow in _reloader.DT_Filtred.Rows
                where (string)myRow[filter.Field] == filter.Value
                select myRow;
            if (results.Any())
                _reloader.DT_Filtred = results.CopyToDataTable<DataRow>();
            else
            {
                _filtres.Remove(curentFilter);
            }
        }
    }
    catch (Exception e)
    {
        ExLog.Error(e.Message);
        _filtres.Remove(curentFilter);
    }  
}

好吧,照常使用网格:

private void GenerateFullView()
{
    if(_reloader.ReadFile == "") return;
    try
    {
        exDataGridView1.DataSource = _reloader.DT_Filtred;   
        exDataGridView1.EditMode = DataGridViewEditMode.EditProgrammatically;
        exDataGridView1.AllowUserToAddRows = false;
        exDataGridView1.AlternatingRowsDefaultCellStyle.BackColor = Color.LightGray;
        exDataGridView1.Refresh();
    }
    catch (Exception e)
    {
        ExLog.Error(e.Message);
    }
}

再次,关键点。在我们使用过滤器之前,一切都很好,并且不会每次都重置网格/选择/滚动位置。一旦我们深入到DataTable中,选择和滚动重置就会开始。 在论坛上查找,但我只发现了艾滋病。例如,在更新之前,请记住滚动条和选定位置,然后返回该位置。但是所有这些肠子,例如在一个表中,最多可以容纳100-15万行,并且每秒返回滚动条将令人毛骨悚然。感谢您的关注,如果您有任何想法,请回答。我还没有(为什么选择和滚动位置保持在一种情况下并重置为另一种情况?

0 个答案:

没有答案