Я знаю, что когда Виртуальный режим включен, я не могу использовать сортировку, потому что DataGridView не является источником данных, иными словами, вы не можетеиспользуйте виртуальный режим для сортировки, потому что DVG не знает, как сортировать
Моя проблема в том, что у меня есть большие данные , и мне нужно использовать виртуальный режим, который помог бы мне читатьвсе мои данные быстро.Но я не могу больше сортировать. Hier - это та же проблема, но она не помогает, потому что bound и Unbound Cloumns
Вопрос в том, как я могу отсортироватьс режимом Virtaul.
Вот пример моего кода:
private List<Person> _personList;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
_personList = new List<Person>();
_personList.Add(new Person { FirstName = "Max", LastName = "Mustermann" });
_personList.Add(new Person { FirstName = "Alex", LastName = "bhaa" });
_personList.Add(new Person { FirstName = "jod", LastName = "dga" });
dgv.Columns.Add("FirstName", "Vorname");
dgv.Columns.Add("LsstName", "Nachname");
dgv.Columns[0].SortMode = DataGridViewColumnSortMode.Automatic;
dgv.Columns[1].SortMode = DataGridViewColumnSortMode.Automatic;
dgv.AllowUserToAddRows = true;
dgv.Rows.Clear();
dgv.Rows.AddCopies(0, _personList.Count);
dgv.AllowUserToAddRows = false;
dgv.SortCompare += Dgv_SortCompare;
}
private void Dgv_SortCompare(object sender, DataGridViewSortCompareEventArgs e)
{
var value1 = dgv[e.Column.Index, e.RowIndex1];
var value2 = dgv[e.Column.Index, e.RowIndex2];
e.SortResult = string.CompareOrdinal(value1.Value.ToString(), value2.Value.ToString());
e.Handled = true;
}
private void dgv_CellValueNeeded(object sender, DataGridViewCellValueEventArgs cellValueEventArgs)
{
int rowIndex = cellValueEventArgs.RowIndex >= _personList.Count ? -1 : cellValueEventArgs.RowIndex;
if (rowIndex == -1)
{
return;
}
var person = _personList[cellValueEventArgs.RowIndex];
var value = cellValueEventArgs.ColumnIndex == 0 ? person.FirstName : person.LastName;
cellValueEventArgs.Value = value;
dgv.Rows[rowIndex].Tag = person;
}
private void dgv_ColumnHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e)
{
dgv.VirtualMode = false;
dgv.Sort(dgv.Columns[0], ListSortDirection.Descending);
dgv.VirtualMode = true;
}
}
public class Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
};