我有一个问题搞不清楚。
我有一个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"选项时,用户将获得一个窗口,用户可以在其中选择另一个客户。这是因为用户没有分配给该客户的特定项目。当用户选择一个时,它将在组合框中使用以下代码进行更改。
uxUrenInvoeren[collumnIndex, row.Index].Value = uxInvoerenKlant.Items[klantIndex];
klantindex
是需要选择的客户,因为它是从组合框中检索的。在我看来,这是一种正确的对象。
在此之后,引发datagridview_dataerror
事件,其中我获得格式异常和以下异常文本。
DataGridViewComboBoxCell值无效。
有什么问题吗?
我自己发现了这个问题。
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
您应该将所选值添加到组合框的项集合中,由于分配的值在ComboBoxColumn
的Item
集合中未找到,因此引发异常,因此不是有效值。
尝试添加Add
(dataGridView1.Columns[0] as DataGridViewComboBoxColumn).Items.Add
解决方案:
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