FormatException для DataGridViewComboboxCell.Value - PullRequest
0 голосов
/ 15 июля 2011

У меня есть проблема, которую я не могу понять.

У меня есть DataGridViewComboboxCell,

List<ComboBoxItem> klanten = new List<ComboBoxItem>();
foreach (ICustomer customer in CustomerFactory.CreateCustomers())
{
     klanten.Add(new ComboBoxItem(customer.Naam, customer.Id));
}
klanten.Add(new ComboBoxItem("Klant aanvraag", -1));

uxInvoerenKlant.DataSource = klanten;
uxInvoerenKlant.DisplayMember = "Text";
uxInvoerenKlant.ValueMember = "Value";

При выборе опции «Klant aanvraag» пользователь получает окно, в котором пользователь может выбрать другого клиента. Это по той причине, что пользователь не был назначен для конкретного проекта для этого клиента. Когда пользователь выберет один, он будет изменен в Combobox следующим кодом.

uxUrenInvoeren[collumnIndex, row.Index].Value = uxInvoerenKlant.Items[klantIndex];

klantindex - это клиент, которого нужно выбрать, поскольку он извлекается из поля со списком. На мой взгляд, это правильный объект.

После этого возникает событие datagridview_dataerror, где я получаю исключение Format со следующим текстом исключения.

Значение DataGridViewComboBoxCell недопустимо.

В чем проблема?

Ответы [ 4 ]

1 голос
/ 15 июля 2011

Я сам нашел проблему.

uxUrenInvoeren[collumnIndex, row.Index].Value содержит значение ComboBoxItem, а не сам ComboBoxItem. Код теперь выглядит так:

ComboBoxItem item = uxInvoerenKlant.Items[klantIndex] as ComboBoxItem;
if (item != null)
{
    uxUrenInvoeren[collumnIndex, row.Index].Value = item.Value;
}

Таким образом, все идет хорошо.

Спасибо за помощь!

0 голосов
/ 05 сентября 2012

Решение:

Private Sub gvPrint_DataError(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewDataErrorEventArgs) Handles gvPrint.DataError
    If e.Context = DataGridViewDataErrorContexts.Formatting Or e.Context = DataGridViewDataErrorContexts.PreferredSize Then
        e.ThrowException = False
    End If
End Sub
0 голосов
/ 15 июля 2011

Необходимо добавить выбранное значение в коллекцию элементов в выпадающем списке, возникает исключение, поскольку назначенное значение не найдено в коллекции Item ComboBoxColumn и, следовательно, не является допустимым значением.

Попробуйте добавить его, используя Add

(dataGridView1.Columns[0] as DataGridViewComboBoxColumn).Items.Add
0 голосов
/ 15 июля 2011

Я думаю, что это может быть вашим значением -1. Может быть, вам нужно начать с 0

...