[C# .NET] Remove Laatste Rij BindingSource / DataGridView

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Davio
  • Registratie: November 2007
  • Laatst online: 06-01 16:46
Ik heb een probleem met een bindingsource en een datagridview waardoor ik de laatste rij niet kan verwijderen.
Mijn DataGridView heeft AllowUserToAddRows op false en AllowUserToDeleteRows op false. Er is dus geen virtuele rij met zo'n sterretje ervoor en deleten kan alleen met een button.

De boel is als volgt gekoppeld:
C#:
1
2
3
4
5
6
7
8
// Context is een LINQ to SQL context
this.jobBindingSource.DataSource = context.Jobs;
this.dataGridViewJobs.DataSource = this.jobBindingSource;

// Ik heb een verwijder button met de volgende code daarin:
// Hij checkt eerst of current null is, zo ja, dan toont hij een warning en returnt hij, vervolgens:
this.jobBindingSource.RemoveCurrent();    
context.SubmitChanges();


Dit werkt dus voor elke rij behalve de laatste, dan geeft hij de volgende error:
An unhandled exception of type 'System.InvalidOperationException' occurred in System.Windows.Forms.dll

Additional information: DataBinding cannot find a row in the list that is suitable for all bindings.
Ik heb op de MSDN gelezen dat dit kan komen doordat de index van Current kleiner dan 0 is (is bij mij precies 0, laatste rij immers), of doordat de count 0 of kleiner is (is 1 bij mij) of dat AllowDelete van de bindingsource op false staat (staat bij mij op true).

Ik zit inmiddels met mijn handen in het haar, iemand enig idee?

Acties:
  • 0 Henk 'm!

  • Davio
  • Registratie: November 2007
  • Laatst online: 06-01 16:46
Laat ik maar weer antwoord geven op mijn eigen vraag voor overige hulpelozen die hier terechtkomen.

Mijn probleem was dat ik twee DatePickers op mijn form had die ook gebound waren aan de BindingSource. Deze DatePickers kunnen niet met de Value null omgaan die klaarblijkelijk gezet wordt als het laatste item wordt verwijderd, daarom heb ik het volgende gedaan nav een tip op internet:

C#:
1
2
3
4
5
// Goed
this.dateTimePicker.DataBindings.Add("Text", this.jobBindingSource, "Starttime");

// Fout
this.dateTimePicker.DataBindings.Add("Value", this.jobBindingSource, "Starttime");