Есть ли способ разрешить только уникальные значения в столбце InfraGistics UltraWinGrid? - PullRequest
1 голос
/ 22 марта 2012

Я использую Infragistics UltraWinGrid со столбцом раскрывающихся списков. Я не хочу, чтобы пользователь мог выбрать одно и то же значение для нескольких строк в этом столбце. Есть ли простой (или, черт возьми, я бы согласился на продвинутый) способ сделать это?

Я использую VB.NET

-EDIT-

Я попытался установить фильтр в источнике данных для выпадающего списка. Но когда я это сделал, значения в других полях в этом столбце начали исчезать (не сами значения, а описания, которые они должны были представлять, поэтому вместо чтения «информации» он просто сказал «1»). Все ячейки в столбце ссылаются на одно и то же поле со списком, поэтому если вы отфильтровываете значение из источника данных для одной из них, вы отфильтровываете его для всех.

В настоящее время я пытаюсь перехватить событие CellChange и проверить все остальные используемые в настоящее время значения. Если бы он уже использовался, я бы выложил сообщение, в котором говорилось бы столько же, и вернулся бы к старому значению. Однако значение возвращается как ранее сохраненное, так что ... не полезно. Вот-вот посмотрим, смогу ли я использовать свойство text.

Ответы [ 2 ]

2 голосов
/ 22 марта 2012

Поскольку вы используете Infragistics, вы можете использовать UltraDropDown, который связан с DataTable (или чем-то подобным), к которому вы можете добавить столбец «Выбранные» в дополнение к столбцу, содержащему значения, которые вы хотите показать.

Поскольку выбрано каждое значение (например, AfterCellUpdate или AfterCellListCloseUp), вы можете обновить столбец «Выбранные» в этом источнике данных и использовать фильтр столбцов, чтобы отображать только те элементы, которые не были отмечены как выбранные. , Таким образом, при выборе или удалении элементов содержимое раскрывающегося списка будет автоматически обновляться.

Чтобы удалить выбранный флаг из старого значения, вы можете использовать событие BeforeCellUpdate, чтобы получить доступ к текущему значению ячейки, а затем выполнить поиск в источнике данных, привязанном к UltraDropDown, используя это значение для очистки флага.

1 голос
/ 22 марта 2012

Решено:

Хитрость заключалась в том, чтобы использовать BeforeCellUpdate, у которого BeforeCellUpdateEventArgs есть элемент "NewValue" и "Cancel". Я просто просматриваю все элементы в столбце, чтобы увидеть, соответствует ли какой-либо из них новому значению. Если это так, я уведомляю пользователя и отменяю операцию.

И это все. Вот код:

Private Sub myUltraWinGrid_BeforeCellUpdate(ByVal sender As Object, ByVal e As Infragistics.Win.UltraWinGrid.BeforeCellUpdateEventArgs) Handles myUltraWinGrid.BeforeCellUpdate
        If e.Cell.Column.Key = "myColumn" Then
            Dim newValue As Integer = CInt(e.NewValue)
            For Each row As Infragistics.Win.UltraWinGrid.UltraGridRow In myUltraWinGrid.Rows
                If row.Cells("myColumn") IsNot e.Cell _ 'So I'm not checking against the current cell
                    AndAlso CInt(row.Cells("myColumn").Value) = newValue Then
                    MsgBox("That value has already been used in this column")
                    e.Cancel = True
                End If
                Next
        End If
    End Sub
...