Как сортировать данные в DataGridView, когда виртуальный режим имеет значение true - PullRequest
0 голосов
/ 21 февраля 2019

Я знаю, что когда Виртуальный режим включен, я не могу использовать сортировку, потому что 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; }
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...