大家好! 我们有两个带有数据的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万行,并且每秒返回滚动条将令人毛骨悚然。感谢您的关注,如果您有任何想法,请回答。我还没有(为什么选择和滚动位置保持在一种情况下并重置为另一种情况?