/// <summary> /// 重新按照当前设置排序并刷新显示,且定位到刷新前选中的那一行 /// </summary> public override void Refresh() { // 先确定原来选中的项,按当前排序规则重排 T selectedItem = default(T); if (HasSelectedItem) { selectedItem = DataList[SelectedItemIndex]; } if (!Sort(SortedColumn, SortOrder)) { return; // 如果重排成功,才需要重新定位到之前的选中行 } int nIdx = DataList.FindIndex(t => selectedItem.Equals(t)); if (-1 != nIdx) { ClearSelection(); DataGridViewRow row = Rows[nIdx]; row.Selected = true; if (!row.Displayed) { FirstDisplayedScrollingRowIndex = nIdx; // 选中行不在当前显示区域内,则滚动到选中行 } } base.Refresh(); }