10
votes

C # - DataGridView ne peut pas ajouter de ligne?

J'ai une application de formulaires Windows C # simple qui devrait afficher un DataGridView. En tant que Databindinging, j'ai utilisé un objet (sélectionnée une classe appelée voiture) et c'est ce à quoi il ressemble: xxx

Cependant, lorsque je défini la propriété DataGridView allowReSertadrows to to < Code> true , il n'y a toujours pas peu * qui me permet d'ajouter des lignes.

Quelqu'un a suggéré de définir carbindingsource.allandadd to vrai Cependant, quand je le fais, je reçois un mancheMethodexception qui dit que mon constructeur n'a pas pu être trouvé.


2 commentaires

Je pense que vous aurez besoin d'un paramètre moins constructeur (car aucune information n'est disponible pour être transmise à votre constructeur de 2 paramètres), comment pouvez-vous le lier?


J'ai dû utiliser un tout à fait sur ma source de liaison.


3 Réponses :


4
votes

Vous devez ajouter un gestionnaire d'événements supplémentaires:

public partial class Form1 : Form
{
    private BindingSource carBindingSource = new BindingSource();



    public Form1()
    {
        InitializeComponent();
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        dataGridView1.DataSource = carBindingSource;

        this.carBindingSource.AddingNew +=
        new AddingNewEventHandler(carBindingSource_AddingNew);

        carBindingSource.AllowNew = true;



    }

    void carBindingSource_AddingNew(object sender, AddingNewEventArgs e)
    {
        e.NewObject = new Car();
    }
}


0 commentaires

13
votes

Votre classe de voiture doit avoir un constructeur sans paramètre et votre DataSource doit être quelque chose comme une bande de liaison

Modifier la classe de voiture à ceci: p>

void bindingSource_AddingNew(object sender, AddingNewEventArgs e)
{
    e.NewObject = new Car("",0);
}


1 commentaires

BindingList a résolu mon problème. DataGridView1.dataSource = Nouvellelist (Carlist);



1
votes

J'ai récemment découvert que si vous implémentez votre propre liste de liaison à l'aide de ibindinglist Vous devez retourner true dans votre SupportSchangenotification en plus de ALOWHOW .

the MSDN Article pour DataGridView.allowAserAdrows Spécifie la remarque suivante Toutefois:

Si la DataGridView est liée aux données, l'utilisateur est autorisé à ajouter des lignes si cette propriété et la propriété ibindinglist de la source de données.Allowew sont définies sur True.


0 commentaires