我有一个列表视图,我正在填充8列用户数据.用户可以选择启用自动刷新,这会导致ListView被清除并使用数据库中的最新数据重新填充.
问题是当项目被清除并重新填充时,可见区域会跳回到列表的顶部.因此,如果我正在查看2000年的第1000项,那么回到那个项目是非常不方便的.
基本上,我要问的是,如何获得当前的滚动距离(x和y),然后恢复它们?
我只是想为那些拼命尝试使用有缺陷的ListView.TopItem属性的人提供一些信息:
您必须在调用ListView.EndUpdate后设置TopItem属性
ListView控件的项必须将其Text属性设置为String.Empty以外的其他属性,否则该属性将不起作用.
设置ListView.TopItem会间歇性地抛出空引用异常.始终将此行代码保留在Try ... Catch块中.
当然,这会导致ListView的滚动条跳转到0并返回到顶部项目的位置,这很烦人.如果您找到此问题的解决方法,请更新此问题.
我成功使用了以下内容:
int topItemIndex = 0; try { topItemIndex = listView1.TopItem.Index; } catch (Exception ex) { } listView1.BeginUpdate(); listView1.Items.Clear(); //CODE TO FILL LISTVIEW GOES HERE listView1.EndUpdate(); try { listView1.TopItem = listView1.Items[topItemIndex]; } catch (Exception ex) { }