DataGridViewComboboxCell.Value上的FormatException

时间:2011-07-15 10:12:02

标签: c# winforms datagridview datagridviewcomboboxcell

我有一个我无法弄清楚的问题。

我有一个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 个答案:

答案 0 :(得分:1)

我自己发现了这个问题。

uxUrenInvoeren[collumnIndex, row.Index].Value包含ComboBoxItem的值,而不是ComboBoxItem本身。代码现在看起来像这样:

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

通过这种方式它很顺利。

感谢您的帮助!

答案 1 :(得分:0)

我认为这可能是你的-1值。也许你需要从0开始

答案 2 :(得分:0)

您应该将选定的值添加到组合框的项集合中,引发异常,因为在Item的{​​{1}}集合中找不到分配的值,因此不是有效值。

尝试使用ComboBoxColumn

添加它
Add

答案 3 :(得分:0)

解决方案:

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