Ger Hayden Ответов: 1

Как я могу выполнить проверку уровня сетки inmplement в WPF datagrid?


Я пытаюсь реализовать проверку уровня сетки в WPF datagrid. Все примеры, которые я могу найти, относятся к проверке на уровне строк и ячеек.

Правила будут применяться к подмножеству строк на идентификатор, где строки имеют даты от и до

1. Только 1 ряд, возможно, на сегодняшний день нуль
2. текущая строка от даты не должна находиться между какой-либо другой парой от / до даты для этого идентификатора
3. Если значение To Date не равно null, то оно не должно находиться между какой-либо другой парой From / To date для этого идентификатора.

Может ли кто-нибудь указать мне на хороший пример?

Что я уже пробовал:

Я начал искать способ передачи экземпляра наблюдаемой коллекции в класс ValidationRule и начал проводить онлайн-исследования.

Gerry Schmitz

"Проверка на уровне сетки" подразумевает "операцию" на уровне сетки, например "сохранить". Ваше "сохранение" (или что-то еще) повторяет "содержимое" сетки (т. е. Источник данных) и сохраняет или не сохраняет, показывая самую значительную / первую ошибку, если она этого не сделала.

"Текущая строка" в этом контексте не имеет никакого значения.

Может быть, вы думаете о "взгляде".

Ger Hayden

Привет, Джерри, это должно быть, или Я сдам WPF и вернусь к формам. По мере того как я печатаю, вокруг rowEndEdit формируется идея, которая может просто сработать.
Нем.

Gerry Schmitz

Если я веду "списки", я обычно использую ListView с usercontrols и использую "SelectedItem" для управления моей "текущей строкой" (которая может быть отображением отношений родитель-потомок). Я буду использовать сетки данных с примитивными и / или пользовательскими элементами управления для получения гибких / родительско-дочерних дисплеев, но редко использую их для сложного редактирования. Представления списков пользовательских элементов управления WPF (и UWP) превзойдут любую "сетку данных" (формы или другие).

Сетки "данные" были одной из последних вещей, добавленных в UWP, так как элементов управления UWP "вид" было достаточно. И это было из предыдущего "набора инструментов".

Ger Hayden

Я этого не знал.

1 Ответов

Рейтинг:
1

Ger Hayden

Похоже, это сделает свою работу:

private void unitDataGridEditEnding(object sender, DataGridRowEditEndingEventArgs e)
{
    CUnitMasterBase workingRow = (CUnitMasterBase)e.Row.Item;
    CSharedVariables.m_FromToIssuesFlag dateIssues = CSharedVariables.m_FromToIssuesFlag.NONE;

    IEnumerable<CDates> unitDates = new List<CDates>(this.ViewModel.Units
       .Where(i => i.p_Unit_ID == workingRow.p_Unit_ID)
       .Select(d => new CDates ( d.p_Valid_From, d.p_Valid_To )));

    if (unitDates.Count() <= 1)
    {
        return;
    }

    dateIssues = sharedFunctions.Verify_Dates(unitDates, workingRow.p_Valid_From, workingRow.p_Valid_To);

    if (dateIssues !=  CSharedVariables.m_FromToIssuesFlag.NONE)
    {
        unitDataGrid.CancelEdit();
    }
}