protected void LoadEntityList <T>(DataGridView dgv, int defColumnIndex, ObjectCollection <T> list, T selected, bool needSort, bool isDefDesc, LoadRowData <T> loadRowData) where T : Objectbase { int relativeIndex = 0; if (dgv.CurrentRow != null) { relativeIndex = dgv.FirstDisplayedScrollingRowIndex - dgv.CurrentRow.Index; } dgv.SuspendLayout(); dgv.Rows.Clear(); DataGridViewColumn clmSorted = dgv.SortedColumn; SortOrder ordSort = dgv.SortOrder == SortOrder.None ? (isDefDesc ? SortOrder.Descending : SortOrder.Ascending) : dgv.SortOrder; DataGridViewRow selectedRow = null; for (int i = 0, j = list.Count; i < j; i++) { T obj = list[i]; if (!Objectbase.IsNullOrEmpty(obj) && obj.IsViewable) { DataGridViewRow row = dgv.Rows[dgv.Rows.Add()]; row.Tag = obj; loadRowData.Invoke(row, obj); if (obj.Equals(selected)) { selectedRow = row; } } } //if (ordSort == SortOrder.None) // dgv.Sort(dgv.Columns[(clmSorted == null ? defColumnIndex : clmSorted.Index)], ListSortDirection.Ascending); //else if (needSort) { dgv.Sort(dgv.Columns[(clmSorted == null ? defColumnIndex : clmSorted.Index)], (ordSort == SortOrder.Ascending ? ListSortDirection.Ascending : ListSortDirection.Descending)); } bool hasRows = dgv.Rows.Count > 0; if (null == selectedRow && hasRows) { selectedRow = dgv.Rows[0]; } if (selectedRow != null) { if (selectedRow.Cells[defColumnIndex].Visible == true) { selectedRow.Cells[defColumnIndex].Selected = true; } selectedRow.Selected = true; int selectedIndex = selectedRow.Index + relativeIndex; if (selectedIndex >= 0 && selectedIndex < dgv.Rows.Count) { dgv.FirstDisplayedScrollingRowIndex = selectedIndex; } } else if (hasRows) { dgv.FirstDisplayedScrollingRowIndex = 0; } if (hasRows) { dgv.Select(); } dgv.ResumeLayout(false); }
protected void LoadEntityList <T>(DataGridView dgv, int defColumnIndex, ObjectCollection <T> list, T selected, LoadRowData <T> loadRowData) where T : Objectbase { this.LoadEntityList <T>(dgv, defColumnIndex, list, selected, true, false, loadRowData); }