2017-04-21 4 views
8

J'ai un paiement de table qui a une colonne d'entier nul pouvant être appelée payMonth. J'ai la classe et la liste suivantes:Liaison C# datagridviewcomboboxcolumn pour lister l'affichage, le formatage, préféré Erreur de taille

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); 

Le problème vient ici. Lorsque les données sont affichées dans le dgv, le composant DataGridViewComboBoxColumn cmbMonth affiche les valeurs numériques (1,2,3, ...) et non le nom du mois ('Jan', 'Feb', 'Mar', ...). Et quand je clique sur le dgv, il affiche l'erreur: formatage, affichage et parfois formatage, preferredSize. Lorsque je supprime la propriété DataPropertyName, cette erreur disparaît mais les données ne sont pas affichées. Cependant, les valeurs payMonth dans la table sont uniquement dans la plage de la liste ou sont null.

Ce tableau est des paiements:

enter image description here

enter image description here

Quel est le problème?

+0

Je ne vois rien de suspect dans votre exemple de code. Avez-vous des eventhandlers de formatage pour 'DataGridVIew'? – Fabio

+0

Aucun gestionnaire, mais le style de cellule par défaut –

+0

Quel est le type de colonne 'payMonth' dans la table de paiement? Est-ce que c'est Int32 comme dans la liste des mois? – Fabio

Répondre

6

Après votre mise à jour

Database type of payMonth column is Number: integer

type MS Access Number: integer représentent entier de 16 bits - Type Int16 en .Net.
Donc, vous devriez changer payMonth propriété d'être short (Int16)

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

List of the Most Common Data Type Mappings

+0

Je suis sûr que le nom de colonne dans la table de base de données est identique à la valeur DataPropertyName. C'est payMonth. –