将C#中的DataGridViewComboBoxColumn绑定到列表以显示、格式化和设置首选大小时出现错误

8

我有一个名为payments的表,其中有一个可为空的整数列名为payMonth。我有以下类和列表:

public class months
{
     public int payMonth { get; set; }
     public string monthName { get; set; }
}

lstMonths = new List<months> {
   ,new months() { payMonth = 1, monthName = "jan" }
   ,new months() { payMonth = 2, monthName = "feb" }
   ,new months() { payMonth = 3, monthName = "mar" }
   ,new months() { payMonth = 4, monthName = "apr" }
   ,new months() { payMonth = 5, monthName = "may" }
   ,new months() { payMonth = 6, monthName = "jun" }
   ,new months() { payMonth = 7, monthName = "jul" }
   ,new months() { payMonth = 8, monthName = "aug" }
   ,new months() { payMonth = 9, monthName = "sep" }
   ,new months() { payMonth = 10, monthName = "oct" }
   ,new months() { payMonth = 11, monthName = "nov" }
   ,new months() { payMonth = 12, monthName = "dec" }};

cmbMonth = new DataGridViewComboBoxColumn();
cmbMonth.DataSource = lstMonths;
cmbMonth.ValueMember = "payMonth";
cmbMonth.DisplayMember = "monthName";
cmbMonth.DataPropertyName = "payMonth";
cmbMonth.Name = "cmbPayMonth";
cmbMonth.HeaderText = "Month";
cmbMonth.FlatStyle = FlatStyle.Flat;
cmbMonth.Width = 80;

dgvPayments.Columns.Insert(5, cmbMonth);

问题出在这里。当数据显示在dgv中时,DataGridViewComboBoxColumn cmbMonth 显示数字值(1、2、3、...),而不是月份名称('Jan'、'Feb'、'Mar',...)。当我点击dgv时,它显示错误:格式化、显示和有时格式化、preferredSize。当我删除 DataPropertyName 属性时,这个错误消失了,但数据没有显示出来。尽管表中的 payMonth 值仅在列表范围内或为空。

这是支付表:

enter image description here

enter image description here

有什么问题吗?


我在你的代码示例中没有看到任何可疑的东西。你有为 DataGridVIew 编写任何格式化事件处理程序吗? - Fabio
没有处理程序,但有默认单元格样式。 - Hilal Al-Rajhi
支付表中的 payMonth 列是什么类型?它是否与月份列表中的 Int32 类型相同? - Fabio
能否显示完整的异常信息和可能的堆栈跟踪? - Fabio
在 MS Access 中,它的类型是整数。 - Hilal Al-Rajhi
让我们在聊天中继续这个讨论 - Hilal Al-Rajhi
1个回答

6

更新后

payMonth列的数据库类型为Number: integer

MS Access中的Number: integer代表16位整数 - 在.Net中是Int16类型。
因此,您应该将payMonth属性更改为short(Int16)。

public class months
{
    public short payMonth { get; set; }
    public string monthName { get; set; }
}

最常见的数据类型映射列表

(涉及IT技术,以下不再翻译)

我确信数据库表中的列名与 DataPropertyName 值相同,它是 payMonth。 - Hilal Al-Rajhi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接